PreparedStatement高i姓名体现在插入数据
JDBC事务转账安全
一个转账减去了2000,另一个却失败了,这里就需要引入事务处理。这里的意思是两个操作要同步,不能一个成功,另一个却失败
如果他们两个有一条语句出错,那么就不会执行commit,会去执行回滚
完整代码
package com.JDBC2; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * 模拟银行转账 */ public class TestUpdate { public static void main(String[] args) { Connection conn=null; try{ String driver="com.mysql.cj.jdbc.Driver"; String url="jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true"; String user="root"; String password=""; //1.加载驱动 //Class.forName(driver); //2.和数据库连接 conn=DriverManager.getConnection(url,user,password); //3.创建sql命令发送器 Statement stmt = conn.createStatement(); //设置事务不再自动提交 conn.setAutoCommit(false); //4.准备一个sql命令,用sql发送器发送过去,并返回结果 // stmt.executeUpdate(sql); stmt.executeUpdate("update t_user set money=money-2000 where userid='lisi'"); // stmt.executeUpdate("update t_user set money=money1+2000 where userid='zhangsan'"); stmt.executeUpdate("update t_user set money=money+2000 where userid='zhangsan'"); //事务成功结束 conn.commit(); }catch(SQLException e){ e.printStackTrace(); //事务提交失败 try { conn.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } } //6.关闭资源 // stmt.close(); // conn.close(); } }