Java 我可以在JDBC准备的查询中使用多个语句吗?
我想在我的MySQL服务器上执行类似的操作:Java 我可以在JDBC准备的查询中使用多个语句吗?,java,sql,mysql,jdbc,Java,Sql,Mysql,Jdbc,我想在我的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中不行。它在“;”处引发语法
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中不行。它在“;”处引发语法错误的异常分开陈述。我喜欢这个变量,因为我不必重复lookup子句,但如果必要,我可以重写它。对等连接在UNION子句中也有点笨拙
谢谢
Joshua只需将其作为两个单独的查询(在一个连接中)运行,就会得到相同的结果。JDBC从未支持解析分隔查询。每次调用都是对数据库的一次访问。也许您可以为每个单独的查询执行PreparedStatement.addBatch(),然后执行和检索两个结果集,从而达到您的目的?我希望两次避免网络时间,但这似乎是不可避免的。也许这是一种避免SQL注入的安全功能。@Joshua,您可以批量查询服务器,避免多次网络访问。正如@ddimitrov所说,这似乎不可能直接实现。我没有尝试
PreparedStatement.addBatch()
。存储过程可能也适用于此。如果您对其他供应商感兴趣,则CUBRID数据库支持此功能。请参阅此论坛帖子。