jdbc实现事物管理并搬表
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本文实现旧库中的数据搬到新库中1、获取jdbc连接package com.transferdata;import java.sql.DriverManager;import java.sql.SQLE
千家信息网最后更新 2025年12月01日jdbc实现事物管理并搬表
本文实现旧库中的数据搬到新库中
1、获取jdbc连接
package com.transferdata;import java.sql.DriverManager;import java.sql.SQLException;import com.mysql.jdbc.Connection;public class ConnectionUtils { public Connection getOldConn() { String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/old?useUnicode=true&characterEncoding=utf-8"; String username = "root"; String password = "123456"; Connection conn = null; try { Class.forName(driver); //classLoader,加载对应驱动 conn = (Connection) DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public Connection getNewConn() { String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/new?useUnicode=true&characterEncoding=utf-8"; String username = "root"; String password = "123456"; Connection conn = null; try { Class.forName(driver); //classLoader,加载对应驱动 conn = (Connection) DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public void closeConnection(Connection conn){ // 判断conn是否为空 if(conn != null){ try { conn.close(); // 关闭数据库连接 } catch (SQLException e) { e.printStackTrace(); } } }}2、获取老的数据
package com.transferdata;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PreparedStatement;import com.entity.Customer;public class GetOldData { private Connection oldConn; public GetOldData(Connection oldConn){ this.oldConn = oldConn; } public List getCustomerList() { List customerList = new ArrayList(); String sql = "select * from customer"; PreparedStatement pstmt; try { pstmt = (PreparedStatement)oldConn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { Customer customer = new Customer(); customer.setId(rs.getString("id")); customer.setEmail(rs.getString("email")); customer.setIdcardNo(rs.getString("idcard_no")); customer.setLoginName(rs.getString("login_name")); customer.setMobileNo(rs.getString("mobile_no")); customer.setPassword(rs.getString("password")); customer.setRealName(rs.getString("real_name")); customer.setRecomerMoNo(rs.getString("recomer_mo_no")); customerList.add(customer); } } catch (SQLException e) { e.printStackTrace(); } return customerList; } } 3、实体类
package com.entity;public class Customer { private String id; private String loginName; private String mobileNo; private String recomerMoNo; private String realName; private String email; private String idcardNo; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getMobileNo() { return mobileNo; } public void setMobileNo(String mobileNo) { this.mobileNo = mobileNo; } public String getRecomerMoNo() { return recomerMoNo; } public void setRecomerMoNo(String recomerMoNo) { this.recomerMoNo = recomerMoNo; } public String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getIdcardNo() { return idcardNo; } public void setIdcardNo(String idcardNo) { this.idcardNo = idcardNo; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }4、插入新库
用throws Exception,而不用try/catch,目的是将异常全部抛到外层
如果用try/catch ,外层将不能捕获异常,不会执行回滚操作,这点注意
package com.transferdata;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Date;import java.util.List;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PreparedStatement;import com.entity.Customer;public class InsertNewSchame { private Connection newConn; public InsertNewSchame(Connection newConn){ this.newConn = newConn; } /* * 用throws Exception,而不用try/catch,目的是将异常全部抛到外层 */ public boolean insertCustomer(Customer customer, String id) throws Exception{ // account_id\mobile_app_info\zhima_score\device_token String sqlInsert = "INSERT INTO adm_sys_customer(email,idcard_no,login_name,mobile_no,password,real_name) " + "VALUES (?,?,?,?,?,?)"; PreparedStatement pstmt; pstmt = (PreparedStatement) newConn.prepareStatement(sqlInsert); pstmt.setString(1, customer.getEmail()); pstmt.setString(2, customer.getIdcardNo()); pstmt.setString(3, customer.getLoginName()); pstmt.setString(4, customer.getMobileNo()); pstmt.setString(5, customer.getPassword()); pstmt.setString(6, customer.getRealName()); pstmt.executeUpdate(); pstmt.close(); return true; } }5、测试
外层捕获异常后执行回滚操作
package com.zkbc.transferdata;import java.sql.SQLException;import java.util.List;import com.mysql.jdbc.Connection;import com..entity.Customer;public class Testtest { /* * 外层捕获异常后执行回滚操作 */ public static void main(String args[]) { ConnectionUtils ConnectionUtils = new ConnectionUtils(); Connection oldConn = ConnectionUtils.getOldConn(); Connection newConn = ConnectionUtils.getNewConn(); GetOldData oldData = new GetOldData(oldConn); InsertNewSchame newData = new InsertNewSchame(newConn); try{ oldConn.setAutoCommit(false); newConn.setAutoCommit(false); String cuId = "0"; List customerList = oldData.getCustomerList(); for(Customer customer:customerList) { cuId = (Integer.parseInt(cuId) + 1) + ""; //customer表和credit表 newData.insertCustomer(customer, cuId); } oldConn.commit(); newConn.commit(); }catch(Exception e) { e.printStackTrace(); try { oldConn.rollback(); newConn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }finally { try { oldConn.setAutoCommit(true); newConn.setAutoCommit(true); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } ConnectionUtils.closeConnection(oldConn); ConnectionUtils.closeConnection(newConn); } }}
外层
数据
不用
目的
驱动
实体
数据库
测试
事物
管理
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库范式简单理解
数据库加密主要实现机制
科技互联网标识雕塑
wind数据库多少钱
华为网络安全的治理机构
如何查询数据库约束条件
查同义词的数据库
网络安全你必须知道的
网络安全管家服务
19年软件开发大疆笔试b卷
web服务器搭建方案
银行网络安全与信息化
日新月异的网络技术
网络安全周讲话全文
产品经理不懂数据库
数据库中什么是标准模
网络安全录取条件
江西省少年网络安全
网络技术学习计划表初中
从事通信软件开发
我的世界服务器新手房屋
信赖的数据库复制
邮件服务器如何增加邮箱
sql怎么引用现有数据库
北京建筑行业软件开发公司
云服务器公司是干什么的
学生成绩管理数据库模板
Java服务器代码看不懂
网络安全推荐公众号
做软件开发课程