PreparedStatement 执行sql

try{
conn.setAutoCommit(false); //设置不会自动提交
stmt = conn.createStatement();
stmt.executeQuery("SELECT * FROM temp_info");
stmt.executeUpdate("UPDATE temp_info SET ip='***.***.***.***'");
conn.commit(); //提交事务
System.out.println("Ok!");
conn.close();
}catch(SQLException e){
try{
conn.rollback(); // 操作不成功,回滚事务
}catch(SQLException r){
System.out.println(r.getMessage());
}
System.out.println(e.getMessage());
}

PreparedStatement批量处理和事务代码如下:

 /*  
 * PreparedStatement:  
 1.addBatch() 将一组参数添加到 PreparedStatement对象内部  
 2.executeBatch() 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。  
 *   
 */  
public class PreparedStatementCommitAndRollback {   
    public static void main(String args[]) {   
        Connection con = null;   
        PreparedStatement pstm = null;   
  
        try {   
            // 1. 建立与数据库的连接   
            con = JDBCUtil.getConnection();   
            // 2. 执行sql语句   
            // 1).先创建PreparedStatement语句(发送slq请求):   
            pstm = con.prepareStatement("insert into student values(?,?,?,?)");   
            con.setAutoCommit(false);//1,首先把Auto commit设置为false,不让它自动提交   
            // 2) 设置sql语句1   
            pstm.setInt(1, 33);   
            pstm.setString(2,"wangqin");   
            pstm.setString(3, "c++");   
            pstm.setDouble(4, 78.5);   
            // 3) 将一组参数添加到此 PreparedStatement 对象的批处理命令中。   
            pstm.addBatch();   
            // 2) 设置sql语句2   
            pstm.setInt(1, 34);   
            pstm.setString(2,"wuytun");   
            pstm.setString(3, "c");   
            pstm.setDouble(4, 77);   
            // 3) 将一组参数添加到此 PreparedStatement 对象的批处理命令中。   
            pstm.addBatch();   
            // 2) 设置sql语句3   
            pstm.setInt(1, 31);   
            pstm.setString(2,"tetet");   
            pstm.setString(3, "c++");   
            pstm.setDouble(4, 90);   
            // 3) 将一组参数添加到此 PreparedStatement 对象的批处理命令中。   
            pstm.addBatch();   
            // 2) 设置sql语句4   
            pstm.setInt(1, 32);   
            pstm.setString(2,"liug");   
            pstm.setString(3, "c");   
            pstm.setDouble(4, 50);   
            // 3) 将一组参数添加到此 PreparedStatement 对象的批处理命令中。   
            pstm.addBatch();   
            // 4) 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。   
            pstm.executeBatch();   
            System.out.println("插入成功!");   
            // 若成功执行完所有的插入操作,则正常结束   
            con.commit();//2,进行手动提交(commit)   
            System.out.println("提交成功!");   
            con.setAutoCommit(true);//3,提交完成后回复现场将Auto commit,还原为true,   
  
        } catch (SQLException e) {   
            try {   
                // 若出现异常,对数据库中所有已完成的操作全部撤销,则回滚到事务开始状态   
                if(!con.isClosed()){   
                    con.rollback();//4,当异常发生执行catch中SQLException时,记得要rollback(回滚);   
                    System.out.println("插入失败,回滚!");   
                    con.setAutoCommit(true);   
                }   
           } catch (SQLException e1) {   
               e1.printStackTrace();   
           }   
        }finally{   
            JDBCUtil.closePreparedStatement(pstm);   
            JDBCUtil.closeConnection(con);   
        }   
    }   
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中的 PreparedStatement 可以用来执行 SQL 查询和更新操作。相比于 Statement,使用 PreparedStatement 可以提高 SQL 执行的效率和安全性。以下是通过 PreparedStatement 执行 SQL 的基本步骤: 1. 建立数据库连接 首先需要建立与数据库的连接,可以使用以下代码: ```java import java.sql.*; public class MySQLConnection { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "mypassword"; Connection conn = null; try { conn = DriverManager.getConnection(url, user, password); System.out.println("Connected to the database"); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { try { if (conn != null) { conn.close(); System.out.println("Disconnected from the database"); } } catch (SQLException e) { System.out.println(e.getMessage()); } } } } ``` 在建立连接时,需要使用 DriverManager 类的 getConnection() 方法。 2. 创建 PreparedStatement 对象 在建立数据库连接之后,可以通过 Connection 对象创建 PreparedStatement 对象。PreparedStatement 对象可以通过 SQL 语句创建,例如: ```java PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE id = ?"); ``` 在上述代码中,使用了带有占位符的 SQL 语句创建 PreparedStatement 对象。占位符用于动态设置 SQL 查询语句中的参数。 3. 设置参数值 在创建 PreparedStatement 对象之后,需要为占位符设置参数值。可以使用以下方法为参数设置值: ```java pstmt.setInt(1, 1); // 设置第一个占位符的值为 1 pstmt.setString(2, "hello"); // 设置第二个占位符的值为 "hello" ``` 在上述代码中,使用了 setInt() 和 setString() 方法分别设置占位符的值。需要注意的是,参数的索引从 1 开始。 4. 执行 SQL 查询语句 在设置完参数值后,可以使用 PreparedStatement 对象执行 SQL 查询语句,例如: ```java ResultSet rs = pstmt.executeQuery(); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } ``` 在上述代码中,使用 executeQuery() 方法执行 SQL 查询语句,并使用 ResultSet 对象获取查询结果。通过 ResultSet 对象可以获取查询结果中的数据。 5. 执行 SQL 更新语句 另外,PreparedStatement 也可以用来执行 SQL 更新操作,例如: ```java PreparedStatement pstmt = conn.prepareStatement("UPDATE mytable SET name = ? WHERE id = ?"); pstmt.setString(1, "world"); pstmt.setInt(2, 1); int rowsAffected = pstmt.executeUpdate(); System.out.println(rowsAffected + " rows affected"); ``` 在上述代码中,使用 executeUpdate() 方法执行 SQL 更新语句,并使用返回值获取更新操作受影响的行数。 以上就是通过 PreparedStatement 执行 SQL 的基本步骤。需要注意的是,在使用 PreparedStatement 时,应该尽量避免使用拼接 SQL 语句的方式,而应该使用带有占位符的 SQL 语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值