JDBC-04-笔记

Posted 寻7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC-04-笔记相关的知识,希望对你有一定的参考价值。

案例演示-批量添加事务管理

事物管理在mysql中有介绍:

  • 操作事务的三个步骤
    1. 开启事务:记录回滚点,并通知服务器,将要执行一组操作,要么同时成功、要么同时失败
    2. 执行sql语句:执行具体的一条或多条sql语句
    3. 结束事务(提交|回滚)
      • 提交:没出现问题,数据进行更新
      • 回滚:出现问题,数据恢复到开启事务时的状态
  • 将事务放到service来进行管理,需要注意因为一个事务是使用的同一个Connection,而且Connection对象是在dao层使用的对象,所以在service创建了一个Connection对象并传递给调用的dao层接口,以此来保证Connection对象的唯一。

1. service层

  • 接口

    /*
    	 批量添加
    */
    void batchAdd(List<User> users);
    
  • 实现类

    /*
          事务要控制在此处
    */
    @Override
    public void batchAdd(List<User> users) {
        //获取数据库连接
        Connection connection = JDBCUtils.getConnection();
        try {
            //开启事务
            connection.setAutoCommit(false);
            for (User user : users) {
                //1.创建ID,并把UUID中的-替换
                String uid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
                //2.给user的uid赋值
                user.setUid(uid);
                //3.生成员工编号
                user.setUcode(uid);
    
                //模拟异常
                //int n = 1 / 0;
    
                //4.保存
                userDao.save(connection,user);
            }
            //提交事务
            connection.commit();
        }catch (Exception e){
            try {
                //回滚事务
                connection.rollback();
            }catch (Exception ex){
                ex.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            JDBCUtils.close(connection,null,null);
        }
    }
    

2. dao层

  • 接口

    /**
    	支持事务的添加
    */
    void save(Connection connection,User user);
    
  • 实现类

    /*
           支持事务的添加
    */
    @Override
    public void save(Connection connection, User user) {
        //定义必要信息
        PreparedStatement pstm = null;
        try {
            //1.获取连接
            connection = JDBCUtils.getConnection();
            //2.获取操作对象
            pstm = connection.prepareStatement("insert into user(uid,ucode,loginname,password,username,gender,birthday,dutydate)values(?,?,?,?,?,?,?,?)");
            //3.设置参数
            pstm.setString(1,user.getUid());
            pstm.setString(2,user.getUcode());
            pstm.setString(3,user.getLoginname());
            pstm.setString(4,user.getPassword());
            pstm.setString(5,user.getUsername());
            pstm.setString(6,user.getGender());
            pstm.setDate(7,new Date(user.getBirthday().getTime()));
            pstm.setDate(8,new Date(user.getDutydate().getTime()));
            //4.执行sql语句,获取结果集
            pstm.executeUpdate();
        }catch (Exception e){
            throw new RuntimeException(e);
        }finally {
            JDBCUtils.close(null,pstm,null);
        }
    }
    

以上是关于JDBC-04-笔记的主要内容,如果未能解决你的问题,请参考以下文章

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

sh bash片段 - 这些片段大多只是我自己的笔记;我找到了一些,有些我已经找到了

需要一种有效的方法来避免使用 Laravel 5 重复代码片段

Oracle-常用数据库对象笔记(片段)

如何使用导航组件处理片段内的向上按钮

JSP笔记