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://" + 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());
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() {
@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();
}
}