原料:mysql,sqlite3

思想步骤:

首先从一个数据库取出数据,每取一条就添加到另一个数据库。

示例:

import java.sql.*;

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 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();

}

}

}

}

调用:

public static void main(String[] args) {

SQLite_To_MySQL test = new SQLite_To_MySQL();

try {

test.deal();

} catch (SQLException e) {

e.printStackTrace();

}

}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐