使用IDEA连接数据库及JDBC操作事物

10.7、使用IDEA连接数据库

  • 点击右边的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. 脏读:一个事物读取了另一个没有提交的事物

  2. 不可重复读:在同一个事物内,重复读取表中的数据,表数据发生了改变

  3. 虚读(幻读):在一个事物内,读取到了别人插入的数据,导致前后读出来的结果不一致

 

代码实现

(一下代码块实操中需要拼接)

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("成功");

3、可以在catch语句中显式定义回滚语句,单默认失败就会回滚

} catch (SQLException e) {
           try {
               conn.rollback(); // 如果失败,则回滚事物
          } catch (SQLException ex) {
               e.printStackTrace();
          }
           e.printStackTrace();
      }finally {
           JdbcUtils.relase(conn,ps,rs);
      }
 
posted @   家兴Java  阅读(218)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示