我遇到了障碍。以下语句不会执行,因为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
有没有其他方法可以将包含多个语句的查询作为一个执行?
答案 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查询的任何机制。