Java 如何将多个语句作为一个语句执行查询?
我绕过了一个障碍。以下语句不执行,因为Java 如何将多个语句作为一个语句执行查询?,java,sql,Java,Sql,我绕过了一个障碍。以下语句不执行,因为字符串查询包含多个语句 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 = Driver
字符串查询
包含多个语句
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);
最后一行抛出错误数据定义无效,除非
将查询拆分为多个PreparedStatements
有没有其他方法可以将包含多个语句的查询作为一个语句执行?您可以使用JDBC批处理(addBatch,executeBatch),它允许您“堆叠”语句,并将它们全部发送到db引擎,以便一次执行 这里有一个起点: 但您仍然需要将其拆分为单独的语句,并一次添加一个语句
而且,正如@CHEBURASHKA所指出的,它只返回受每条语句影响的行数——如果您想从表中请求实际数据,这是不好的代码>字符,自然终止SQL查询 所以你必须做:
Stream.of(query.split(";")).forEach(sqlStatement -> System.out.println(sqlStatement))
只需为执行sql查询所使用的任何机制替换
println
。单独执行它们有什么问题吗?如果用户在查询中键入create…where x='good;'和…;选择…;
如何确定第一个查询不在单词good
之后结束。我需要编写额外的复杂正则表达式。您可以尝试conn.createStatement().execute(sql)
它有时会接受多条语句。但一般来说,如果使用JDBC,您需要知道语句的开始和结束位置。+1用于尝试。但是这是不正确的。请看一下这个答案,您是对的,这取决于您正在执行的SQL中的内容,以及是否有需要查看的结果。我将把它放在答案中。