public class demoe {
public static void main(String[] args) {
Connection conn =null;
PreparedStatement ps=null;
PreparedStatement ps1=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8","root","zzj234812");
conn.setAutoCommit(false);//JDBC中默认自动提交事务
ps=conn.prepareStatement("insert into stu_table (name,pwd) values(?,?)");
ps.setObject(1, "张三丰");
ps.setObject(2,"8888");
ps.execute();
System.out.println("插入一个用户,张三丰");
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ps1=conn.prepareStatement("insert into stu_table (name,pwd) values(?,?)");
//ps1=conn.prepareStatement("insert into stu_table (name,pwd) values(?,?,?)");
ps1.setObject(1, "与代言");
ps1.setObject(2,"8888");
ps1.execute();
System.out.println("插入一个用户,与代言");
conn.commit();//提交
} catch (ClassNotFoundException e){
e.printStackTrace();
try {
conn.rollback();//回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
执行结果如下:
插入一个用户,张三丰 插入一个用户,与代言
当我们换上这条语句时:
ps1=conn.prepareStatement("insert into stu_table (name,pwd) values(?,?,?)");
结果只显示第一条语句执行成功,那么我们看数据库并没有数据,说明这两条SQL语句在同一个事务中,要么同时成功,要么同时失败。回滚到第一条SQL语句执行之前的状态