当前位置: 首页 > 面试题库 >

在Java中执行多个SQL语句

上官扬
2023-03-14
问题内容

我想在 Java中 执行查询。

我创建一个连接。然后,我想执行一条INSERT语句,完成后关闭连接,但是我想通过连接执行一些插入语句,并在循环完成后关闭连接。

我能做些什么 ?

我的示例代码是:

public NewClass() throws SQLException {
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException e) {
        System.out.println("Where is your Oracle JDBC Driver?");
        return;
    }
    System.out.println("Oracle JDBC Driver Registered!");

    Connection connection = null;
    try {
        connection = DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:orcl1", "test",
                "oracle");
    } catch (SQLException e) {
        System.out.println("Connection Failed! Check output console");
        return;
    }

    if (connection != null) {
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * from test.special_columns");
        while (rs.next()) {
            this.ColName = rs.getNString("column_name");
            this.script = "insert into test.alldata (colname) ( select " +  ColName + "   from test.alldata2       ) " ;
            stmt.executeUpdate("" + script);
        }        
    }
    else {
        System.out.println("Failed to make connection!");
    }        
}

当执行select语句("SELECT * fromtest.special_columns")时,循环必须为两次,但是当(stmt.executeUpdate("" + script))执行并完成时,则关闭连接并从类中返回。


问题答案:

以下示例使用addBatchexecuteBatch命令同时执行多个SQL命令。

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

结果: 以上代码示例将产生以下结果。结果可能会有所不同。

rows before batch execution= 6
Batch executed
rows after batch execution= = 9

来源:执行多个SQL语句



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

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

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

  • 问题内容: 我想知道是否可以使用JDBC执行类似的操作,因为即使在MySQL查询浏览器中,它当前也提供了异常。 虽然我确实意识到可以拆分SQL查询字符串并执行两次语句,但是我想知道是否有一次性的方法。 问题答案: 我想知道是否可以使用JDBC执行类似的操作。 对的,这是可能的。据我所知,有两种方法。他们是 通过设置数据库连接属性以允许多个查询,默认情况下用分号分隔。 通过调用返回隐式游标的存储过程

  • 我正在使用Java (JDBC)创建一个命令行实用程序来执行SQL语句。脚本被定义为一个文本文件,有许多查询。每个查询由查询分隔符(";"分隔).输出被路由到stdout。 由于JDBC可以批量执行语句,只有当它们不返回ResultSet时,我才需要另一种方法。 截至目前,我将读取带有查询的脚本文件,按分隔符拆分它们,并分析每个查询,无论是“SELECT”查询,还是“INSERT”,“更新”,“删