是否有与 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 ...") 的调用。返回的ResultSets 可以从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?

是否有与 Haskell 'let' 等效的 Python

是否有与 FontUtilities.getCompositeFontUIResource(Font) 等效的非专有等效项?

是否有与 RecyclerView 等效的 addHeaderView?

是否有与 Amazon S3 等效的开源软件? [关闭]