使用JDBC执行多个SQL语句(CRUD)

时间:2014-10-21 09:49:22

标签: java mysql sql jdbc informix

我正在使用Java(JDBC)为SQL语句执行创建命令行实用程序。脚本被定义为具有许多查询的文本文件。每个查询由查询分隔符(“;”)分隔。输出路由到stdout。

SELECT * FROM table1;
UPDATE table1 SET field1='' WHERE field2='';
SELECT * FROM table1;
INSERT INTO table1 VALUES(...)
SELECT * FROM table1;

由于JDBC可以批量执行语句,只有当它们不返回ResultSet时,我还需要另一种方法。

截至目前,我将使用查询读取脚本文件,通过分隔符拆分它们,并分析每个查询,无论是“SELECT”查询,还是“INSERT”,“UPDATE”,“DELETE”查询。之后,我会在它自己的语句中执行每个查询。返回的东西被写入stdout,执行操作数据库的查询。当然,我会保留文件中查询的顺序。

我的问题是:如果文件中的一个查询错误,我就无法回滚,因为每个查询都是单独执行的。我怎么能处理这个问题?

2 个答案:

答案 0 :(得分:1)

对于数据库连接,只需调用connection.setAutoCommit(false)然后执行语句并在完成后调用connection.commit(),如果遇到错误则调用connection.rollback()。

答案 1 :(得分:0)

这是向批处理添加查询的代码。

Statement stmt = conn.createStatement();
conn.setAutoCommit(false);

String SQL = "INSERT INTO table1 VALUES(...)";
stmt.addBatch(SQL);

String SQL = "INSERT INTO Employees (id, first, last, age) " +
         "VALUES(201,'Raj', 'Kumar', 35)";
stmt.addBatch(SQL);

String SQL = "UPDATE Employees SET age = 35 " +
         "WHERE id = 100";
stmt.addBatch(SQL);


 int[] count = stmt.executeBatch();

//显式提交语句以应用更改

 conn.commit();

试试这个......