我想一次执行多个查询或作业。像这样的东西:
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语句分组为一个批处理,并通过一次调用将其提交给数据库。参考
当您一次将多个SQL语句发送到数据库时,可以减少通信开销,从而提高性能。
DatabaseMetaData.supportsBatchUpdates()
executeBatch()
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