hibernate使用jdbc批量操作,备份表,删除表

hibernate使用jdbc批量操作,备份表,删除表

@RequestMapping("backTable")
    @ResponseBody
    public String backTable() {
        HashMap<String, Object> jso = new HashMap<String, Object>();
        SystemInfo systemInfo = carService.findById(SystemInfo.class, 1L);
        jso.put("success", true);
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            Connection c = null;
//            c = DriverManager.getConnection("jdbc:mysql:///db?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true",
//                    "root", "root");
            c = DriverManager.getConnection("jdbc:mysql://" + systemInfo.getDatabaseIpAndPort() + "/" + systemInfo.getDatabaseName()
                            + "?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true",
                    systemInfo.getDatabaseUser(), systemInfo.getDatabasePassword());
            Statement statement = c.createStatement();
            String tagName = "uwb_tag_bak" + sdf.format(new Date());
            String carName = "uwb_car_bak" + sdf.format(new Date());
            statement.execute("CREATE TABLE `" + tagName + "` (" +
                    "  `id` bigint(20) NOT NULL AUTO_INCREMENT," +
                    "  `isEnabled` bit(1) NOT NULL," +
                    "  `moId` varchar(255) DEFAULT NULL," +
                    "  `power` varchar(255) NOT NULL," +
                    "  `status` bit(1) DEFAULT NULL," +
                    "  `tagId` varchar(255) NOT NULL," +
                    "  `tagLine` varchar(255) DEFAULT NULL," +
                    "  `tagMemo` varchar(255) DEFAULT NULL," +
                    "  `tagModel` varchar(255) DEFAULT NULL," +
                    "  `tagType` varchar(255) NOT NULL," +
                    "  `tagVersion` varchar(255) DEFAULT NULL," +
                    "  `ckName` varchar(255) DEFAULT NULL," +
                    "  PRIMARY KEY (`id`)" +
                    ") ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8");

            statement.execute("CREATE TABLE `" + carName + "` (" +
                    "  `id` bigint(20) NOT NULL AUTO_INCREMENT," +
                    "  `carMemo` varchar(255) DEFAULT NULL," +
                    "  `carName` varchar(255) NOT NULL," +
                    "  `carTagId` varchar(255) DEFAULT NULL," +
                    "  `rfid` varchar(255) DEFAULT NULL," +
                    "  `status` bit(1) NOT NULL," +
                    "  PRIMARY KEY (`id`)" +
                    ") ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8");

            insertTag(tagName);
            insertCar(carName);

            //删除备份表
            List<String> strings = carService.deleteTableBakNameList(systemInfo.getDatabaseName());
            /*
			SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE 						TABLE_SCHEMA=:tableSchema AND TABLE_NAME in
			(select table_name
			from information_schema.tables
			where table_schema=:tableSchema and table_type='base table' and (table_name like '%uwb_tag_bak%' or table_name like '%uwb_car_bak%') )
			ORDER BY CREATE_TIME desc
			LIMIT 10,20;
			*/
            for (String string : strings) {
                carService.deleteTable(string);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jso.remove("success");
            jso.put("error", false);
            GsonTools.toJson(jso);
        }
        return GsonTools.toJson(jso);
    }

    public void insertTag(String name) {
        Session session = factory.openSession();
        Transaction tx = session.beginTransaction();

        final List<Tag> tagList = carService.findAll(Tag.class);

        try {
            final String sqlStr = new String("INSERT INTO `" + name + "`(id,tagType,tagId,tagModel,tagVersion,tagMemo,tagLine,isEnabled,status,power,moId,ckName) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");
            Work work = new Work() {
                @Override
                public void execute(Connection connection) throws SQLException {
                    PreparedStatement statement = connection.prepareStatement(sqlStr);
                    for (int i = 0; i < tagList.size(); i++) {
                        Tag tag = tagList.get(i);
                        statement.setLong(1, tag.getId());
                        statement.setString(2, tag.getTagType());
                        statement.setString(3, tag.getTagId());
                        statement.setString(4, tag.getTagModel());
                        statement.setString(5, tag.getTagVersion());
                        statement.setString(6, tag.getTagMemo());
                        statement.setString(7, tag.getTagLine());
                        statement.setBoolean(8, null == tag.getIsEnabled() ? true : tag.getIsEnabled());
                        statement.setBoolean(9, null == tag.getStatus() ? true : tag.getStatus());
                        statement.setString(10, tag.getPower());
                        statement.setString(11, tag.getMoId());
                        statement.setString(12, tag.getCkName());
                        statement.addBatch();
                    }
                    statement.executeBatch();
                }
            };
            session.doWork(work);
            tx.commit(); //提交事务
        } catch (HibernateException en) {
            en.printStackTrace();
            tx.rollback();
        } catch (Exception en) {
            en.printStackTrace();
            tx.rollback();
        } finally {
            session.close();
        }
    }

    public void insertCar(String name) {
        Session session = factory.openSession();
        Transaction tx = session.beginTransaction();

        final List<Car> carList = carService.findAll(Car.class);

        try {
            final String sqlStr = new String("INSERT INTO `" + name + "`(id,carName,carTagId,rfid,status,carMemo) VALUES (?,?,?,?,?,?)");

            Work work = new Work() {
                @Override
                public void execute(Connection connection) throws SQLException {
                    PreparedStatement statement = connection.prepareStatement(sqlStr);
                    for (int i = 0; i < carList.size(); i++) {
                        Car car = carList.get(i);
                        statement.setLong(1, car.getId());
                        statement.setString(2, car.getCarName());
                        statement.setString(3, car.getCarTagId());
                        statement.setString(4, car.getRfid());
                        statement.setBoolean(5, null == car.getStatus() ? true : car.getStatus());
                        statement.setString(6, car.getCarMemo());
                        statement.addBatch();
                    }
                    statement.executeBatch();
                }
            };
            session.doWork(work);
            tx.commit(); //提交事务
        } catch (HibernateException en) {
            tx.rollback();
        } catch (Exception en) {
            tx.rollback();
        } finally {
            session.close();
        }
    }

//批量删除示例
public void deleteHeartRate(int saveDaysHeartRate){
        Calendar now = Calendar.getInstance();
        now.add(Calendar.DAY_OF_MONTH, -saveDaysHeartRate);

        Session session = factory.openSession();
        Transaction tx  = session.beginTransaction();
        try {
            String sqlStr = new String("DELETE from uwb_heartratehistory WHERE date < ?");

            Work work = new Work() {//Contract for performing a discrete piece of org.hibernate.jdbc.Work;
                @Override
                public void execute(Connection connection) throws SQLException {
                    PreparedStatement statement = connection.prepareStatement(sqlStr);
                    String format = sdf.format(now.getTime());
                    statement.setString(1,format);
                    int i = statement.executeUpdate();
                    System.out.println("心率历史数据删除,删除"+format+"之前的数据,"+"已删除"+i+"条");
                    log.info("心率历史数据删除,删除"+format+"之前的数据,"+"已删除"+i+"条");
                }
            };
            session.doWork(work);
            tx.commit(); //提交事务
        } catch(HibernateException en) {
            tx.rollback();
            log.error("Failed to delete the ...");
        } catch (Exception en) {
            log.error("Failed to delete the ...");
            tx.rollback();
        } finally {
            session.close();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值