gpt4 book ai didi

java - 如何从java执行多个SQL语句

转载 作者:IT老高 更新时间:2023-10-28 21:18:35 26 4
gpt4 key购买 nike

我想一次执行多个查询或作业。像这样的东西例如:

String query="select * from tab1;insert into tab1 values(...);update tab1..;delete from tab1...;"
Statement st = con1.createStatement();
ResultSet rs = st.executeQuery(query);

或多个选择查询。查询将是动态的。

但我无法做到这一点。运行以分号分隔的多个查询的方法是什么。

最佳答案

您可以使用以下示例来实现这一点:使用 addBatch 和 executeBatch 命令同时执行多个 SQL 命令。

批处理允许您将相关的 SQL 语句分组到一个批处理中,并通过一次调用数据库来提交它们。 reference

当您一次向数据库发送多个 SQL 语句时,您可以减少通信开销,从而提高性能。

  • JDBC 驱动程序不需要支持此功能。您应该使用 DatabaseMetaData.supportsBatchUpdates() 方法来确定目标数据库是否支持批量更新处理。如果您的 JDBC 驱动程序支持此功能,则该方法返回 true。
  • addBatch Statement、PreparedStatement 和 CallableStatement 的 () 方法用于将单个语句添加到批处理中。 executeBatch() 用于开始执行所有组合在一起的语句。
  • executeBatch () 返回一个整数数组,数组的每个元素代表各自更新语句的更新计数。
  • 就像您可以将语句添加到批处理中一样,您可以使用 clearBatch 删除它们() 方法。此方法删除您使用 addBatch() 方法添加的所有语句。但是,您不能有选择地选择要删除的语句。

示例:

import java.sql.*;

public class jdbcConn {
public static void main(String[] args) throws Exception{
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection con = DriverManager.getConnection
("jdbc:derby://localhost:1527/testDb","name","pass");

Statement stmt = con.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String insertEmp1 = "insert into emp values
(10,'jay','trainee')";
String insertEmp2 = "insert into emp values
(11,'jayes','trainee')";
String insertEmp3 = "insert into emp values
(12,'shail','trainee')";
con.setAutoCommit(false);
stmt.addBatch(insertEmp1);//inserting Query in stmt
stmt.addBatch(insertEmp2);
stmt.addBatch(insertEmp3);
ResultSet rs = stmt.executeQuery("select * from emp");
rs.last();
System.out.println("rows before batch execution= "
+ rs.getRow());
stmt.executeBatch();
con.commit();
System.out.println("Batch executed");
rs = stmt.executeQuery("select * from emp");
rs.last();
System.out.println("rows after batch execution= "
+ rs.getRow());
}
}

请参阅 http://www.tutorialspoint.com/javaexamples/jdbc_executebatch.htm

关于java - 如何从java执行多个SQL语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com