• 使用jdk进行数据迁移(sqlite迁移mysql)


    直接粘贴代码

    注意:rewriteBatchedStatements=true(加快连接速度)

    package com.wbg;
    
    import org.omg.Messaging.SYNC_WITH_TRANSPORT;
    
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public class DBSQLite {
        //驱动
        static String DBDRIVERSQLITE="org.sqlite.JDBC";
        //文件绝对地址
        static String DBURLSQLITE="B:\lagou.db";
        static Connection CONNSQLITE;
        static PreparedStatement PSTATSQLITE;
    
        //驱动
        static String DBDRIVERMYSQL="com.mysql.jdbc.Driver";
        //数据库
        static String DBURLMYSQL="jdbc:mysql://localhost:3306/ii?rewriteBatchedStatements=true";//comoany是数据库
        static Connection CONNMYSQL;
        static PreparedStatement PSTATMYSQL;
    
        static {
            try {
                Class.forName(DBDRIVERSQLITE);
                CONNSQLITE= DriverManager.getConnection("jdbc:sqlite:"+DBURLSQLITE);
    
                Class.forName(DBDRIVERMYSQL);
                CONNMYSQL=DriverManager.getConnection(DBURLMYSQL,"root","123456");
    
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        /**
         * 获取数据库中所有表
         */
        public static List<String> getTable(){
            System.out.println("开始获取数据表");
            //数据库
            DatabaseMetaData md=null;
            List<String> list=new ArrayList<>();
            try {
                //获取数据库
                md = CONNSQLITE.getMetaData();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                //进行查询表
                ResultSet rs=md.getTables(null,null,null,null);
                if (rs!= null) {
                    list = new ArrayList<String>();
                }
                //往list添加查询到的表
                while (rs.next()){
                    list.add(rs.getString("TABLE_NAME"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            System.out.println("查询数据表成功");
            return list;
        }
        /**
         * 向mysql创建数据表
         */
        public static void createTable(){
            ResultSetMetaData rsmd = null;
            //获取所有数据库
            List<String> list=DBSQLite.getTable();
            for (int i = 0; i < list.size(); i++) {
                long srop=System.currentTimeMillis();
                System.out.println("开始创建第" + (i + 1 )+ "数据表...");
                //查询表
                String sql = "select * from " + list.get(i);
                int size = 0;
                try {
                    PSTATSQLITE = CONNSQLITE.prepareStatement(sql);
                    //获取数据表
                    rsmd = PSTATSQLITE.getMetaData();
                    //创建语句
                    String create = "create table " + list.get(i) + "(";
                    //fh目的最后一个没有逗号
                    String fh = "";
                    //循环表中所有字段
                    size = rsmd.getColumnCount();
                    for (int j = 0; j < size; j++) {
                        //字段名 类型
                        create += fh + rsmd.getColumnName(j + 1) + "  " + rsmd.getColumnTypeName(j + 1);
                        //判断长度是否不为0  比如varchar(10)  integer
                        if (rsmd.getPrecision(j + 1) != 0) {
                            //不为0就给个长度
                            create += "(" + rsmd.getPrecision(j + 1) + ")";
                        }
                        fh = ",";
                    }
                    create += ");";
                    execute(create);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                System.out.println("开始向(" + list.get(i) + ")数据表添加数据...");
               if (insertTable( list.get(i), size)){
                    System.out.println("第" + (i + 1 ) + "个数据表数据录入完毕");
                }
                else {
                    System.out.println("第" + (i + 1 ) + "个数据表数据录入失败");
                }
            }
        }
        /**
         * 向mysql数据表录入数据
         * sql  查询语句  size 字段长度
         */
        public static boolean insertTable(String sql,int size){
            ResultSet rs=executeQuerySQLITE("select * from "+sql);
            try {
                String fh="";
                String sqladd="insert into "+sql+" values(";
                for (int i = 0; i < size; i++) {
                    sqladd+=(fh+"?");
                    fh=",";
                }
                sqladd+=")";
                //关闭自动提交
                CONNMYSQL.setAutoCommit(false);
                PSTATMYSQL=CONNMYSQL.prepareStatement(sqladd);
    
                while (rs.next()){
    
                    for (int i = 0; i < size; i++) {
                        PSTATMYSQL.setObject(i+1,rs.getObject(i+1));
                    }
                    PSTATMYSQL.addBatch();
                }
                PSTATMYSQL.executeBatch();
                //提交
                CONNMYSQL.commit();
                //打开自动提交
                CONNMYSQL.setAutoCommit(true);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return true;
        }
        public static ResultSet executeQuerySQLITE(String  sql){
            try {
                PSTATSQLITE=CONNSQLITE.prepareStatement(sql);
                return PSTATSQLITE.executeQuery();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
        public static void execute(String sql){
            try {
                PSTATMYSQL=CONNMYSQL.prepareStatement(sql);
                PSTATMYSQL.execute();
            } catch (SQLException e) {
                System.out.println("创建数据库失败");
            }
        }
        public static int executeUpdate(String sql ,Object[]in){
            try {
                PSTATMYSQL =CONNMYSQL.prepareStatement(sql);
                for (int i = 0; i <in.length; i++){
                    PSTATMYSQL.setObject(i+1,in[i]);
                }
                return  PSTATMYSQL.executeUpdate();
    
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return 0;
        }
    
        public static void main(String[] args) {
            long start= System.currentTimeMillis();
            System.out.println("开始迁移数据");
             createTable();
            System.out.println("迁移完毕,耗时:"+(System.currentTimeMillis()-start)/1000);
        }
    }

     

     

  • 相关阅读:
    最大子数组问题:股票
    dfs小练 【dfs】
    java小知识点简单回顾
    cdoj841-休生伤杜景死惊开 (逆序数变形)【线段树 树状数组】
    二路归并排序算法
    优秀Python学习资源收集汇总(强烈推荐)
    怎么学习逆向工程?
    __cdecl 、__fastcall、__stdcall
    getchar()、putchar()、gets()、puts()、cin.get()、cin.getline()、getline()
    <cctype>库
  • 原文地址:https://www.cnblogs.com/weibanggang/p/9627278.html
Copyright © 2020-2023  润新知