next:jdbc 如何允许 SQL 服务器有多个语句
next:jdbc How to allow multiple statements for SQL Server
我想 运行 对 SQL 服务器单次执行多个语句。我用 Node.js 做,但我不能 运行 使用 next.jdbc
相同的查询
例如,如果我 运行 这个:
(def db {:jdbcUrl "jdbc:jtds:sqlserver://localhost:1433/TESTDB;user=sa;password=passwd"})
(def ds (jdbc/get-datasource db))
(jdbc/execute! ds ["select * from EMPLOYEE;select FIRST_NAME from EMPLOYEE;"])
我也尝试过将语句包装在具有相同结果的事务中
(jdbc/execute! ds ["BEGIN TRANSACTION select * from EMPLOYEE;select FIRST_NAME from EMPLOYEE; COMMIT"])
我总是得到第一个查询。
我也尝试过 Microsoft 的 JDBC 驱动程序。
Sean Corfield 说如果数据库支持,那么 next.jdbc 应该支持。
但是我做不到
解决方案
正如肖恩·科菲尔德所指出的那样
(jdbc/execute! ds ["BEGIN select * from EMPLOYEE;select FIRST_NAME from EMPLOYEE; END"] {:multi-rs true})
据我所知,SQL服务器的JDBC驱动程序不支持多语句。但是,即使这样做了,您也不应该使用它,因为它为注入式攻击打开了一个潜在的安全漏洞。相反,如果您确实需要执行多个 SQL 语句,请将当前的 SQL 重构为单个语句,或者使用包含在单个事务中的多个语句。
供参考,其他一些 JDBC 驱动程序,例如 MySQL,可能支持多语句。
是的,您可以 运行 返回多个语句和多个结果集,但您必须告诉 next.jdbc
这就是您想要的行为。
查看针对 MS SQL 服务器的测试 运行ning 多个语句:https://github.com/seancorfield/next-jdbc/blob/develop/test/next/jdbc_test.clj#L560-L572
入门指南中(简要地)提到了这一点:“如果将 :multi-rs true
选项传递给 execute!
,您将得到一组结果集,而不仅仅是一个结果集合:零个或多个向量的向量。"
我想 运行 对 SQL 服务器单次执行多个语句。我用 Node.js 做,但我不能 运行 使用 next.jdbc
相同的查询例如,如果我 运行 这个:
(def db {:jdbcUrl "jdbc:jtds:sqlserver://localhost:1433/TESTDB;user=sa;password=passwd"})
(def ds (jdbc/get-datasource db))
(jdbc/execute! ds ["select * from EMPLOYEE;select FIRST_NAME from EMPLOYEE;"])
我也尝试过将语句包装在具有相同结果的事务中
(jdbc/execute! ds ["BEGIN TRANSACTION select * from EMPLOYEE;select FIRST_NAME from EMPLOYEE; COMMIT"])
我总是得到第一个查询。
我也尝试过 Microsoft 的 JDBC 驱动程序。
Sean Corfield 说如果数据库支持,那么 next.jdbc 应该支持。
但是我做不到
解决方案
正如肖恩·科菲尔德所指出的那样
(jdbc/execute! ds ["BEGIN select * from EMPLOYEE;select FIRST_NAME from EMPLOYEE; END"] {:multi-rs true})
据我所知,SQL服务器的JDBC驱动程序不支持多语句。但是,即使这样做了,您也不应该使用它,因为它为注入式攻击打开了一个潜在的安全漏洞。相反,如果您确实需要执行多个 SQL 语句,请将当前的 SQL 重构为单个语句,或者使用包含在单个事务中的多个语句。
供参考,其他一些 JDBC 驱动程序,例如 MySQL,可能支持多语句。
是的,您可以 运行 返回多个语句和多个结果集,但您必须告诉 next.jdbc
这就是您想要的行为。
查看针对 MS SQL 服务器的测试 运行ning 多个语句:https://github.com/seancorfield/next-jdbc/blob/develop/test/next/jdbc_test.clj#L560-L572
入门指南中(简要地)提到了这一点:“如果将 :multi-rs true
选项传递给 execute!
,您将得到一组结果集,而不仅仅是一个结果集合:零个或多个向量的向量。"