Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将多个语句作为一个语句执行查询?_Java_Sql - Fatal编程技术网

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中的内容,以及是否有需要查看的结果。我将把它放在答案中。