• Java 实现两个数据库数据的迁移


      原料: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 <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();
    }
    }
    }

    }
     

      调用:

    
    
        public static void main(String[] args) {
    SQLite_To_MySQL test = new SQLite_To_MySQL();
    try {
    test.deal();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
     
  • 相关阅读:
    MongoVUE破解方法(转)
    Apache和IIS共享80端口,支持多域名
    让作业飞吧,与屌丝兄弟们分享我的分布式作业调度平台 【拥抱开源,拥抱作业调度的神器Quartz.net】
    关于Nbearlite 访问PostgreSql,MySql,Sqlite的Bug
    php5.4.6/5.3.16/5.2.17安装(In windows),配置(转)
    MSSQL翻页存储过程
    话说客户端连接mongoDB的连接参数(转载)
    关于Windows频繁打开关闭端口时出现的问题(转至老赵)
    zeromq的几种模式(转)
    如何设置代理服务器上网
  • 原文地址:https://www.cnblogs.com/oukele/p/9626006.html
Copyright © 2020-2023  润新知