是否有与 Mysql 的“多语句查询”等效的 java
Posted
技术标签:
【中文标题】是否有与 Mysql 的“多语句查询”等效的 java【英文标题】:Is there a java equivalent of Mysql's "multiple-statement-queries" 【发布时间】:2017-02-21 14:49:46 【问题描述】:所以基本上,我想避免存储过程,但同时我不希望多次往返数据库来执行顺序语句。
显然this blog 说Facebook 使用mysql 的multiple-statement-queries。不幸的是,它是一个 C API,是否有与之等效的 java?
简而言之,问题是“在 java+mysql 中,第二条 jdbc 语句如何使用第一条语句的输出作为输入来执行,而无需往返数据库且没有存储过程”?
如果不是,其他人如何解决这个问题?
【问题讨论】:
我实际上从未听说过多个语句查询。然而,如果你想从 Java 中执行多个 MySQL 语句,你总是可以使用一个事务。你有什么想法? @TimBiegeleisen 我本可以使用 jdbc 批处理,但问题不同。考虑那个 Facebook 博客中提到的简单问题。第二条语句如何使用第一条语句的输出作为输入来执行,而不需要往返数据库和没有存储过程? 我相信这里已经回答了:***.com/questions/10797794/… 不,请参阅我对 Tim 的评论,批处理的问题是第二个语句如何使用第一个语句的输出作为输入? 只使用存储过程。它们在 mysql 中可用。 【参考方案1】:是的,MySQL 的 JDBC 驱动程序支持多语句查询。然而,出于安全原因,它默认被禁用,因为多语句查询会显着增加与最终 SQL 注入相关的风险。
要启用多语句查询支持,只需将allowMultiQueries=true
选项添加到您的连接字符串(或以映射格式传递等效选项)。您可以在此处获取有关该选项的更多信息:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html。
启用此选项后,您可以简单地执行类似于:statement.execute("select ... ; select ... ; select ...")
的调用。返回的ResultSet
s 可以从Statement
对象迭代:每次调用statement.getResultSet()
返回下一个。使用statement.getMoreResults()
确定是否确实有更多ResultSet
可用。
【讨论】:
在此处查看示例代码:***.com/questions/10797794/…【参考方案2】:听起来你想做批处理。 这是一个重复的问题,答案很好: How to execute multiple SQL statements from java
【讨论】:
不,请参阅我对 Tim 的评论,批处理的问题是第二个语句如何使用第一个语句的输出作为输入? 很抱歉我错过了那部分。是否可以使用嵌套的 select 语句来完成您想要的操作? 在很多情况下是的(通过使用连接),但并非总是如此。 Mysql为此明确提供了一个C api(有问题的链接),我想如果java中有类似的东西。以上是关于是否有与 Mysql 的“多语句查询”等效的 java的主要内容,如果未能解决你的问题,请参考以下文章
是否有与 MySQL 的 DESCRIBE [表] 等效的 SQLite?
是否有与 PHP 的 preg_replace 等效的 MySQL?
是否有与 FontUtilities.getCompositeFontUIResource(Font) 等效的非专有等效项?