[java实现两个数据库数据同步]Java实现两个数据库数据的迁移

importjava.sql.*;

publicclassSQLite_To_MySQL{

privateConnectiongetIteconn(){

try{

Class.forName("org.sqlite.JDBC");

returnDriverManager.getConnection("jdbc:sqlite:E:\MyDB\lagou.db");

}catch(ClassNotFoundException|SQLExceptione){

e.printStackTrace();

}

returnnull;

}

privateConnectiongetMysqlconn(){

try{

Class.forName("org.mariadb.jdbc.Driver");

returnDriverManager.getConnection("jdbc:mariadb://localhost:3306/test","oukele","oukele");

}catch(ClassNotFoundException|SQLExceptione){

e.printStackTrace();

}

returnnull;

}

publicvoiddeal()throwsSQLException{

//SQLite数据库

Connectioniteconn=getIteconn();

Statementitestmt=iteconn.createStatement();

ResultSetiters=itestmt.executeQuery("select*fromlagou_position");

//结果集获取到的长度

intsize=iters.getMetaData().getColumnCount();

//比较懒,拼接insertinto语句

StringBuffersbf=newStringBuffer();

sbf.append("insertintolagouvalues(");

Stringlink="";

for(inti=0;i

sbf.append(link).append("?");

link=",";

}

sbf.append(")");

//MySQL数据库

Connectionmysqlconn=getMysqlconn();

PreparedStatementmysqlpstmt=mysqlconn.prepareStatement(sbf.toString());

//取出结果集并向MySQL数据库插入数据(使用批处理)

//完成条数

intcount=0;

intnum=0;

//取消事务(不写入日志)

mysqlconn.setAutoCommit(false);

longstart=System.currentTimeMillis();

while(iters.next()){

++count;

for(inti=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);

}

publicvoidclose(Connectionconn,Statementstmt,ResultSetrs){

if(rs!=null){

try{

rs.close();

}catch(SQLExceptione){

e.printStackTrace();

}

}

if(stmt!=null){

try{

stmt.close();

}catch(SQLExceptione){

e.printStackTrace();

}

}

if(conn!=null){

try{

conn.close();

}catch(SQLExceptione){

e.printStackTrace();

}

}

}

}

猜你喜欢

转载自www.cnblogs.com/sqlserver-mysql/p/12725690.html