Java代码实现两种数据库的数据迁移
Posted 全栈工程师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java代码实现两种数据库的数据迁移相关的知识,希望对你有一定的参考价值。
https://www.cnblogs.com/oukele/p/9626006.html
public class SQLite_To_mysql { private Connection getIteconn(){ try { Class.forName("org.sqlite.JDBC"); return DriverManager.getConnection("jdbc:sqlite:E:\\\\MyDB\\\\lagou.db"); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } return null; } private Connection getMysqlconn(){ try { Class.forName("org.mariadb.jdbc.Driver"); return DriverManager.getConnection("jdbc:mariadb://localhost:3306/test","oukele","oukele"); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } return null; } public void deal() throws SQLException { //SQLite数据库 Connection iteconn = getIteconn(); Statement itestmt =iteconn.createStatement(); ResultSet iters = itestmt.executeQuery("select * from lagou_position"); //结果集获取到的长度 int size = iters.getMetaData().getColumnCount(); //比较懒,拼接insert into 语句 StringBuffer sbf =new StringBuffer(); sbf.append("insert into lagou values ("); String link =""; for (int i = 0; i <size ; i++) { sbf.append(link).append("?"); link=","; } sbf.append(")"); //MySQL数据库 Connection mysqlconn = getMysqlconn(); PreparedStatement mysqlpstmt = mysqlconn.prepareStatement(sbf.toString()); //取出结果集并向MySQL数据库插入数据 ( 使用批处理 ) //完成条数 int count =0; int num=0; //取消事务(不写入日志) mysqlconn.setAutoCommit(false); long start = System.currentTimeMillis(); while (iters.next()) { ++count; for (int i=1;i<= size;i++) { mysqlpstmt.setObject(i, iters.getObject(i)); } //将预先语句存储起来,这里还没有向数据库插入 mysqlpstmt.addBatch(); //当count 到达 20000条时 向数据库提交 if (count % 20000 ==0 ){ ++num; mysqlpstmt.executeBatch(); System.out.println("第"+num+"次提交,耗时:"+(System.currentTimeMillis()-start)/1000.0+"s"); } } //防止有数据未提交 mysqlpstmt.executeBatch(); //提交 mysqlconn.commit(); System.out.println("完成 "+count+" 条数据,耗时:"+(System.currentTimeMillis()-start)/1000.0+"s"); //恢复事务 // mysqlconn.setAutoCommit(true); //关闭资源 close(mysqlconn,mysqlpstmt,null); close(iteconn,itestmt,iters); } public void close(Connection conn,Statement stmt,ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
以上是关于Java代码实现两种数据库的数据迁移的主要内容,如果未能解决你的问题,请参考以下文章