package csdn1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.junit.Test;
public class jdbc5 {
// 1.事务:要么都完成,要么都不完成,默认情况下数据库自动提交事务
@Test
public void transaction() {
jdbc5 j = new jdbc5();
//不使用事务:
/*
// 修改名字
String sql1 = "update user set name='ztalk' where name='zl'";
// 想想又不改了,想改回来,但由于wherre写错了,导致名字没改回来
String sql2 = "update user set name='zl' wherre name='ztalk'";
try (Connection cn = j.getConnect();
PreparedStatement ps1 = cn.prepareStatement(sql1);
PreparedStatement ps2 = cn.prepareStatement(sql2);) {
ps1.executeUpdate();
ps2.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
*/
// 事务写法
String sql1 = "update user set name='ztalk' where name='zl'";
String sql2 = "update user set name='zl' wherre name='ztalk'";
try (Connection cn = j.getConnect();
PreparedStatement ps1 = cn.prepareStatement(sql1);
PreparedStatement ps2 = cn.prepareStatement(sql2);) {
cn.setAutoCommit(false);// 设置不自动提交
ps1.executeUpdate();
ps2.executeUpdate();
cn.commit();// 手动提交--提交之前有异常,则在该事务内的事件都失败
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getConnect() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String url = "jdbc:mysql://localhost:3306/mydbs2";
Connection cn = null;
try {
cn = DriverManager.getConnection(url, "root", "root");
} catch (SQLException e) {
e.printStackTrace();
}
return cn;
}
/*
2.基本知识:
ORM:Object Relationship Database Mapping 对象和关系数据库的映射
一个对象,对应数据库里的一条记录,也就是把一个关系表映射成一个类。
DAO:Data Access Object 数据访问对象
把数据库相关的操作都封装在这个类里面,其他地方看不到JDBC的代码
*/
}
jdbc事务处理
最新推荐文章于 2023-10-20 08:24:44 发布