我可以在 JDBC 准备查询中使用多个语句吗?
Posted
技术标签:
【中文标题】我可以在 JDBC 准备查询中使用多个语句吗?【英文标题】:Can I use multiple statements in a JDBC prepared query? 【发布时间】:2011-03-22 22:10:44 【问题描述】:我想在我的 mysql 服务器上执行类似的操作:
SET @id=(SELECT id FROM lookupTable WHERE field=?);
(SELECT * FROM table2 WHERE id=@id)
UNION
(SELECT * FROM table3 WHERE id=@id)
UNION
(SELECT * FROM table4 WHERE id=@id);
这在控制台上运行良好,但在我的 Java PreparedStatement 中却不行。它在“;”处抛出一个带有语法错误的异常分隔语句。我喜欢这个变量,因为我不必重复查找子句,但如有必要我可以重写它。等效的 JOIN 与 UNION 子句也有点尴尬。
谢谢,
约书亚
【问题讨论】:
正如@ddimitrov 所说,这似乎直接不可能。我没有尝试PreparedStatement.addBatch()
。存储过程也可能适用于此。
如果您对其他供应商感兴趣,那么 CUBRID 数据库支持此功能。请参阅此论坛帖子cubrid.org/forum/534638。
【参考方案1】:
JDBC 从未支持解析分隔查询。每次调用都是对数据库的一次访问。也许你可以实现你想要为每个单独的查询执行 PreparedStatement.addBatch(),然后执行和检索两个结果集?
【讨论】:
【参考方案2】:仅将其作为两个单独的查询(在一个连接中)运行应该会得到相同的结果。
【讨论】:
本来希望能避免两次网络时间,但这里似乎无法避免。也许这是避免 SQL 注入的安全功能。 @Joshua,您可以批量查询服务器,避免多次网络行程。以上是关于我可以在 JDBC 准备查询中使用多个语句吗?的主要内容,如果未能解决你的问题,请参考以下文章