使用IDEA连接数据库及JDBC操作事物
-
点击右边的database-->点加号,光标悬浮Data Source,选中MySQL
-
之后在第一个页面填入正确的用户名与密码,测试连接,成功后点击Apply-->OK(框内左下方会提示加载包,点击下载即可)
(此处如果不导入数据包,会加载失败)
-
连接成功后,可以选择数据库:
-
点击Data Source Properties(快捷键:Shift+Enter),选择Schemas,选择想要的数据库,打开折叠选项后双击相应的表可查看内容
-
修改信息:双击要修改的信息,输入完成后按Enter,上方多了个绿色的箭头,提示信息为Submit,一定要点击(提交)后才可实现数据的修改
-
在右边框上边找到《 Jump to Query Console...》,点击后选择一个控制台点击进去的页面为编写SQL代码的地方
-
在左边框上方可以看到当前选择数据库的名称,点击此处可切换数据库
用SQL代码创建一个数据库:
/*创建账户表*/
CREATE TABLE account(
id Int PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(40),
money FLOAT
);
/*插入测试数据*/
insert into account(name,money) values('A',1000);
insert into account(name,money) values('B',1000);
insert into account(name,money) values('B',1000);编写完后点击左上角绿色箭头执行
10.8、JDBC操作事物
要么都成功,要么都失败
ACID原则:
原子性:要么全部完成,要么都不完成
一致性:总数不变
隔离性:多个进程互不干扰
持久性:一旦提交不可逆,持久化到数据库
隔离性问题:
-
脏读:一个事物读取了另一个没有提交的事物
-
不可重复读:在同一个事物内,重复读取表中的数据,表数据发生了改变
-
虚读(幻读):在一个事物内,读取到了别人插入的数据,导致前后读出来的结果不一致
代码实现
(一下代码块实操中需要拼接)
1、开启事物
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
// 关闭数据库的自动提交功能,而后会自动开启事物
conn.setAutoCommit(false); // 开启事务
2、一组业务执行完毕,提交事物
String sql1 = "update account set money = money - 500 where name = 'A'";
ps = conn.prepareStatement(sql1);
ps.executeUpdate();
String sql2 = "update account set money = money + 500 where name = 'B'";
ps = conn.prepareStatement(sql2);
ps.executeUpdate();
// 业务完毕,提交事物
conn.commit();
System.out.println("成功");
} catch (SQLException e) {
try {
conn.rollback(); // 如果失败,则回滚事物
} catch (SQLException ex) {
e.printStackTrace();
}
e.printStackTrace();
}finally {
JdbcUtils.relase(conn,ps,rs);
}
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术