当前位置: 首页 > 知识库问答 >
问题:

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

谭高峯
2023-03-14

我正在使用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”,“更新”,“删除”查询。之后,我会在它自己的语句中执行每个查询。返回某些内容的查询将写入 stdout,将执行操作数据库的查询。而且,当然,我会保留文件中查询的顺序。

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

共有3个答案

娄丁雨
2023-03-14

代码可能对您有帮助。

 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");
姜兴业
2023-03-14

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

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

试试这个.....

曹旭
2023-03-14

对于数据库连接,只需调用连接即可。setAutoCommit(false)然后执行语句并调用连接。完成后提交(),或连接。如果遇到错误,请回滚()。

 类似资料:
  • 下面给出一个例子来演示一下如何使用JDBC来执行各种SQL语句,其中包括DDL语句(建立数据库和数据表)、INSERT语句和SELECT语句。 1.程序分析说明 本程序首先创建一个mydb数据库(如果存在就不创建),然后创建一个用于保存图书信息的表t_books(如果存在,删除后再创建),最后向表中插入两条记录,并查询和显示其中的第2条记录。 2.代码编写 本程序使用了Statement接口的ex

  • 问题内容: 我想在 Java中 执行查询。 我创建一个连接。然后,我想执行一条语句,完成后关闭连接,但是我想通过连接执行一些插入语句,并在循环完成后关闭连接。 我能做些什么 ? 我的示例代码是: 当执行select语句()时,循环必须为两次,但是当()执行并完成时,则关闭连接并从类中返回。 问题答案: 以下示例使用&命令同时执行多个SQL命令。 结果: 以上代码示例将产生以下结果。结果可能会有所不

  • 问题内容: 我想一次执行多个查询或作业。像这样的东西: 或多个选择查询。查询将是动态的。 但是我无法做到这一点,以半冒号分隔的多个查询的运行方式是什么? 问题答案: 您可以使用以下示例实现addBatch和executeBatch命令同时执行多个 SQL 命令。 批处理允许您将相关的SQL语句分组为一个批处理,并通过一次调用将其提交给数据库。参考 当您一次将多个SQL语句发送到数据库时,可以减少通

  • 问题内容: 如何将这些多个查询合并为一个(可以吗?) 顺便问一下,如果在完成所有查询后再执行mysql_close($ db),那会更好吗? 问题答案: 传递到作为第五个参数。 例: 当您使用mysql_fetch_ *或mysql_num_rows或mysql_affected_rows时,仅第一条语句有效。 例如,以下代码,第一个语句为INSERT,则无法执行mysql_num_rows和my

  • 问题内容: 说我想做,如何在同一个mysql_query()中做它们? 编辑: 由于这个问题有很多看法,我想指出,自PHP 5.5起,其他功能现在已被弃用,不应使用。 问题答案: 我从来没有尝试过,但是我认为您可以使用mysqli :: multi_query 。拒绝多条语句的好处之一是,它可以立即排除一些更常见的SQL注入攻击,例如添加一条语句。因此,您可能需要注意多个语句。

  • 我想知道是否可以在一个准备好的语句中执行多个SQL查询。这是我要执行的第一个查询: