利用jdbc解决跨数据库之间数据迁移(oracle迁移db2)
2017-12-08 11:06
405 查看
二次开发的项目,基本都会牵扯到数据的迁移,记录一下不适用框架利用原生jdbc来访问数据库进行数据的迁移操作.
第一个 数据库(例bd2):
第二个 数据库(例oracle)
下面就是公共的连接关闭资源方法:
第一个 数据库(例bd2):
public class ConnectionDB2 { private static final String URL="jdbc:db2://ip地址:端口/名字"; //DB2数据库url private static final String USER="***"; //DB2数据库账号 private static final String PASSWORD="***"; //DB2数据库密码 static{ try { Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance(); //利用反射注册驱动 } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public Connection getConnection(){ Connection conn=null; try { conn=DriverManager.getConnection(URL, USER, PASSWORD); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
第二个 数据库(例oracle)
public class ConnectionORACLE { private static final String URL="jdbc:oracle:thin:@ip:端口:nbcsora"; //ORACLE数据库url private static final String USER="***"; //ORACLE数据库账号 private static final String PASSWORD="***"; //ORACLE数据库密码 static{ try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //利用反射注册驱动 } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public Connection getConnection(){ Connection conn=null; try { conn=DriverManager.getConnection(URL, USER, PASSWORD); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
下面就是公共的连接关闭资源方法:
public class CloseFunction { //关闭连接方法,释放资源 public static void closeConnection(Connection conn){ if (conn !=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } //关闭执行sql,释放资源 public static void closeExecuteSQL(Statement preparedStatement){ if (preparedStatement !=null){ try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } } //关闭查询SQL结果,释放资源 public static void closeResultSet(ResultSet resultSet){ if(resultSet !=null){ try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } } }上面搞定,那就可以写jdbc原生代码进行对数据库的转移了:
public void test(){ long startTime=System.currentTimeMillis(); //记录开始时间 Connection connDB2=null; //链接DB2数据库 Connection connOracle=null; //链接oracle数据库 Statement statement=null; ResultSet resultSet=null; Statement statementOR=null; ResultSet resultSetOR=null; //oracle 结果集 PreparedStatement preparedStatement=null; try { ConnectionORACLE connectionOracle=new ConnectionORACLE(); System.out.println(connectionOracle+"链接oracle成功!"); ConnectionDB2 connectionDB2=new ConnectionDB2(); System.out.println(connectionDB2+"-->>>链接DB2数据库成功!"); connOracle=connectionOracle.getConnection(); //oracle语句 String oracleSQLT="SELECT transmsn_dt_tm_conv, acq_ins_id_cd_conv,sys_tra_no_conv,frn_ins_tp,msg_tp_conv,transmsn_dt_tm,acq_ins_id_cd,sys_tra_no,related_key,alt_key," + "fwd_ins_tp,acq_ins_tp,rcv_ins_tp,iss_ins_tp,rsn_cd,rsn_cd_conv,trans_rcv_ts,to_ts,moni_dist,moni_in," + "risk_in,pre_proc_st,frn_bat_no,trans_id,trans_id_conv,trans_seq,trans_seq_conv,trans_tp,trans_tp_conv,resnd_num," + "settle_dt,settle_mon,settle_d,cycle_no,sms_dms_conv_in,msg_tp,pri_acct_no,pri_acct_no_conv,bin,cups_card_in," + "cups_sig_card_in,card_brand,card_class,card_attr,trans_chnl,card_media,proc_cd,proc_cd_conv,trans_at,fwd_settle_at," + "rcv_settle_at,fwd_settle_conv_rt,rcv_settle_conv_rt,fee_dir_in,dms_trans_id,iss_ins_id_cd,loc_trans_tm,loc_trans_tm_conv,loc_trans_dt,mchnt_tp," + "mchnt_tp_conv,acq_ins_cntry_cd,pos_entry_md_cd,pos_entry_md_cd_conv,card_seq_id,pos_cond_cd,pos_cond_cd_conv,pos_pin_capture_cd,fwd_ins_id_cd,fwd_ins_id_cd_conv," + "retri_ref_no,retri_ref_no_conv,term_id,term_id_conv,mchnt_cd,mchnt_cd_conv,card_accptr_nm_loc,card_accptr_nm_loc_conv,sec_related_ctrl_inf,addn_pos_inf," + "addn_pos_inf_conv,orig_msg_tp,orig_msg_tp_conv,orig_sys_tra_no,orig_sys_tra_no_conv,orig_transmsn_dt_tm,orig_transmsn_dt_tm_conv,orig_acq_ins_id_cd,orig_acq_ins_id_cd_conv,orig_fwd_ins_id_cd," + "orig_fwd_ins_id_cd_conv,rcv_ins_id_cd,rcv_ins_id_cd_conv,auth_resp,session_id,cgw_svc_name,file_upd_cd,svc_retr_cd,visa_private,fwd_ins_cntry_cd," + "frn_trans_fee_at,frn_trans_proc_fee_at,trans_fee_at,fwd_proc_in,rcv_proc_in,trans_st,trans_fin_ts,frn_settle_dt,trans_curr_cd,fwd_settle_curr_cd," + "rcv_settle_curr_cd,cdhd_at,cdhd_conv_rt,cdhd_curr_cd,expire_dt,conv_dt,ext_pan_cntry_cd,auth_id_resp_cd,iss_resp_cd,iss_resp_cd_conv," + "acq_resp_cd,acq_resp_cd_conv,repl_at,func_cd,orig_data,orig_at,resv_fld1,resv_fld2,addn_pvt_dat,addn_at," + "iss_addn_dat,iss_ins_res,swt_dat,fina_net_dat,fina_net_id,cups_def_fld,cups_def_fld_conv,internal_header,ext_header,visa_header," + "track_1_dat,track_2_dat,track_3_dat,id_no,tfr_in_acct_id,tfr_out_acct_id,cups_res,cups_res_conv,acq_ins_res,pri_acct_no_ext," + "ic_flds,resv_fld3,resv_fld4,resv_fld5,resv_fld6,cdhd_auth_info,cdhd_auth_rslt from TBL_SWT_FRN_TRANS_LOG1 ";//373 400 //执行db2数据库sql语句 String SQL="INSERT INTO FPDB_SWT.TBL_SWT_FRN_TRANS_LOG3(transmsn_dt_tm_conv, acq_ins_id_cd_conv,sys_tra_no_conv,frn_ins_tp,msg_tp_conv,transmsn_dt_tm,acq_ins_id_cd,sys_tra_no,related_key,alt_key," + "fwd_ins_tp,acq_ins_tp,rcv_ins_tp,iss_ins_tp,rsn_cd,rsn_cd_conv,trans_rcv_ts,to_ts,moni_dist,moni_in," + "risk_in,pre_proc_st,frn_bat_no,trans_id,trans_id_conv,trans_seq,trans_seq_conv,trans_tp,trans_tp_conv,resnd_num," + "settle_dt,settle_mon,settle_d,cycle_no,sms_dms_conv_in,msg_tp,pri_acct_no,pri_acct_no_conv,bin,cups_card_in," + "cups_sig_card_in,card_brand,card_class,card_attr,trans_chnl,card_media,proc_cd,proc_cd_conv,trans_at,fwd_settle_at 9f56 ," + "rcv_settle_at,fwd_settle_conv_rt,rcv_settle_conv_rt,fee_dir_in,dms_trans_id,iss_ins_id_cd,loc_trans_tm,loc_trans_tm_conv,loc_trans_dt,mchnt_tp," + "mchnt_tp_conv,acq_ins_cntry_cd,pos_entry_md_cd,pos_entry_md_cd_conv,card_seq_id,pos_cond_cd,pos_cond_cd_conv,pos_pin_capture_cd,fwd_ins_id_cd,fwd_ins_id_cd_conv," + "retri_ref_no,retri_ref_no_conv,term_id,term_id_conv,mchnt_cd,mchnt_cd_conv,card_accptr_nm_loc,card_accptr_nm_loc_conv,sec_related_ctrl_inf,addn_pos_inf," + "addn_pos_inf_conv,orig_msg_tp,orig_msg_tp_conv,orig_sys_tra_no,orig_sys_tra_no_conv,orig_transmsn_dt_tm,orig_transmsn_dt_tm_conv,orig_acq_ins_id_cd,orig_acq_ins_id_cd_conv,orig_fwd_ins_id_cd," + "orig_fwd_ins_id_cd_conv,rcv_ins_id_cd,rcv_ins_id_cd_conv,auth_resp,session_id,cgw_svc_name,file_upd_cd,svc_retr_cd,visa_private,fwd_ins_cntry_cd," + "frn_trans_fee_at,frn_trans_proc_fee_at,trans_fee_at,fwd_proc_in,rcv_proc_in,trans_st,trans_fin_ts,frn_settle_dt,trans_curr_cd,fwd_settle_curr_cd," + "rcv_settle_curr_cd,cdhd_at,cdhd_conv_rt,cdhd_curr_cd,expire_dt,conv_dt,ext_pan_cntry_cd,auth_id_resp_cd,iss_resp_cd,iss_resp_cd_conv," + "acq_resp_cd,acq_resp_cd_conv,repl_at,func_cd,orig_data,orig_at,resv_fld1,resv_fld2,addn_pvt_dat,addn_at," + "iss_addn_dat,iss_ins_res,swt_dat,fina_net_dat,fina_net_id,cups_def_fld,cups_def_fld_conv,internal_header,ext_header,visa_header," + "track_1_dat,track_2_dat,track_3_dat,id_no,tfr_in_acct_id,tfr_out_acct_id,cups_res,cups_res_conv,acq_ins_res,pri_acct_no_ext," + "ic_flds,resv_fld3,resv_fld4,resv_fld5,resv_fld6,cdhd_auth_info,CDHD_AUTH_RSLT)"+ "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; statementOR=connOracle.createStatement(); statementOR.execute(oracleSQLT);//执行sql resultSetOR=statementOR.getResultSet();//获取oracle结果集; connDB2=connectionDB2.getConnection();//db2链接 statement=connDB2.createStatement(); connDB2.setAutoCommit(false); preparedStatement=connDB2.prepareStatement(SQL);//预编译 int num=0; while (resultSetOR.next()) { num ++; preparedStatement.setString(1, LangUtils.returnString(resultSetOR.getString("transmsn_dt_tm_conv"))); .... //preparedStatement.executeUpdate(); preparedStatement.addBatch(); //每一万次在oracle数据库里提交事务 if(num>10000){ preparedStatement.executeBatch(); connDB2.commit(); num=0; } } preparedStatement.executeBatch(); connDB2.commit(); } catch (Exception e) { try { connDB2.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally{ new CloseFunction().closeConnection(connOracle); //关闭oracle数据库,释放资源 new CloseFunction().closeConnection(connDB2); //关闭DB2数据库,释放资源 long endTime=System.currentTimeMillis(); //记录程序结束时间 System.out.println("总的时间:"+(endTime-startTime)/1000+"秒"); } }
相关文章推荐
- linux 6.4平台利用rman迁移oracle 11g r2数据库
- [导入]各种数据库系统(Oracle,SQLServer,DB2等)的JDBC驱动下载网址
- 转:不同平台之间的 DB2 数据库迁移一例
- 三大主流关系数据库Oracle、DB2和SQL Server之间的比较
- 利用oracle快照dblink解决数据库表同步问题
- 利用oracle快照dblink解决数据库表同步问题
- oracle ----系统服务 --- 文件体系结构 ----网络配置 -----利用企业管理器登录数据库 -----利用SQL Plus登录数据库 -------运行时故障分析与解决
- java中三种主流数据库数据库(sqlserver,db2,oracle)的jdbc连接总结
- 数据库迁移.从DB2到Oracle
- java中三种主流数据库数据库(sqlserver,db2,oracle)的jdbc连接总结
- IBM DB2重磅组合拳欲绞杀Oracle 大型数据库迁移五大建议
- IBM WPS v8.5 数据迁移至DB2时因数据库用户权限不足引起的迁移失败问题解决示例
- 利用oracle快照dblink解决数据库表同步
- PowerDesigner15连接数据库报错解决办法Non SQL Error : Could not load class oracle.jdbc.OracleDriver
- java中三种主流数据库数据库(sqlserver,db2,oracle)的jdbc连接总结
- 利用oracle快照dblink解决数据库表同步问题
- oracle 11g JDBC连接数据库:IO异常The Network Adapter could not establish the connection 解决方法
- 数据库数据库(sqlserver,db2,oracle)的jdbc连接总结
- PowerDesigner15连接数据库报错解决办法Non SQL Error : Could not load class oracle.jdbc.OracleDriver
- 利用oracle快照dblink解决数据库表同步问题