【问题标题】:Execute multiple SQL statements (CRUD) with JDBC使用 JDBC 执行多个 SQL 语句 (CRUD)
【发布时间】:2014-12-16 12:04:11
【问题描述】:

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

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”查询.之后,我会在它自己的语句中执行每个查询。返回的那些被写入标准输出,操作数据库的查询被执行。而且,我当然会保留文件中查询的顺序。

我的问题是:如果文件中的某个查询出错,我无法回滚,因为每个查询都是单独执行的。我该如何处理这个问题?

【问题讨论】:

  • 如果你愿意分享你的代码,我们很容易理解
  • 目前正在寻找一种方法来实现这一点。我认为这段代码是我正在寻找的:stackoverflow.com/a/1497614/1188357
  • 在end语句中以字符串方式执行,单独的方法执行查询,并为有效行设置标志

标签: java mysql sql jdbc informix


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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();

试试这个.....

【讨论】:

  • SELECT 查询呢?
  • 我的意思是,如果我有String SQL = "SELECT * FROM emploeyees",那么将这个查询添加到批处理时如何得到结果?
【解决方案3】:

此代码可能对您有所帮助。

 String Query1 = "SELECT * FROM Tablename1";
        stmt1 = con.createStatement();
        ResultSet rs = stmt1.executeQuery(Query1);
        rs.next();
        int totalQuery1Count = rs.getInt("TOTAL_Item");

    String Query2 = "SELECT * FROM Tablename2";
        rs = stmt1.executeQuery(Query2);
        rs.next();
        int totalQuery2Count = rs.getInt("TOTAL_Item2");

【讨论】:

    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    相关资源
    最近更新 更多