如何将多个语句的查询作为一个执行?

时间:2014-02-05 23:33:22

标签: java sql

我遇到了障碍。以下语句不会执行,因为String query包含多个语句。

String query="create volatile table test1 as (etc . ); select TOP 10 * from test1; ";

        String driver = "com.xxx";
        String conUrl="jdbc:ccc";
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(conUrl,user,password);

        PreparedStatement stmt=conn.prepareStatement(query);

最后一行会引发错误Data definition not valid unless solitary

将查询拆分为多个PreparedStatements

非常麻烦

有没有其他方法可以将包含多个语句的查询作为一个执行?

2 个答案:

答案 0 :(得分:2)

您可以使用JDBC批处理(addBatch,executeBatch),它允许您“堆栈”语句并将它们全部发送到db引擎以立即执行。

这是一个起点:http://viralpatel.net/blogs/batch-insert-in-java-jdbc/

但是您仍然需要将其拆分为单独的语句,并一次添加一个。 Java: splitting a comma-separated string but ignoring commas in quotes

而且,正如@CHEBURASHKA指出的那样,它只返回受每个语句影响的行数 - 如果你想从表中请求实际数据,那就不好了。

答案 1 :(得分:0)

它不应该很麻烦,您已经通过让查询包含;字符来完成它,该字符自然会终止SQL查询。

所以你必须这样做:

Stream.of(query.split(";")).forEach(sqlStatement -> System.out.println(sqlStatement))

只需将println替换为用于执行sql查询的任何机制。