mysql 相关自动化操作

原文地址:http://m.blog.csdn.net/liman65727/article/details/71430484

MySQL数据库,从一个数据库中复制指定表到另一个数据库中

发表于2017/5/8 20:07:52  171人阅读

分类: 数据库

需求:

这几天项目中遇到一个问题,需要将一个mysql数据库中某些表的数据复制到另一个数据库中,这个数据库是不存在的,也需要在代码中动态创建数据库,然后将表直接复制到这个动态创建的数据库中。 
网上找了很多资料,有能动态创建一个数据库的简单方式,数据复制过程绕了些湾,不过还好最后都搞定了,其实也很简单,这里记下,方便自己以后使用。 
可以将事情分步去完成,第一步:搞定动态创建数据库。第二步:复制表格数据

首先连接到原始数据库,然后利用Statement对象执行创建数据库的语句就OK。然后就调用相应的sql语句进行复制就行,完整核心函数如下:

    /**
     * 利用创建表的语句和select语句解决数据迁移问题
     * @param dataBaseNameSource 源数据库名称
     * @param tableNameSource 源数据表名称
     * @param dataBaseNameTarget 目标数据库名称
     * @param tableNameTarget 目标数据表名称
     */
    public static void copyDataFromOneTable2AnotherWithSelectAndCreateSql(String dataBaseNameSource,String tableNameSource,
            String dataBaseNameTarget,String tableNameTarget){
        conn = null;
        Statement statement= null;
        try {
            conn = getConnection();
            statement = conn.createStatement();
            //创建数据库
            statement.execute("create database "+dataBaseNameTarget);
            statement.execute("use "+dataBaseNameTarget);

            //创建数据表
            statement.execute("create table "+tableNameTarget+" LIKE "+dataBaseNameSource+"."+tableNameSource);

            //导入数据
            String copySql = "insert "+tableNameTarget +" select * from "+dataBaseNameSource+"."+tableNameSource;
            statement.execute(copySql);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

一些公共的方法

    /**
     * 获取一个连接
     * @return
     */
    public static Connection getConnection(){
        try {
            String url = bundle.getString("jdbc.url");
            String username = bundle.getString("jdbc.username");
            String password = bundle.getString("jdbc.password");
            Class.forName(bundle.getString("jdbc.driver"));
            Connection conn = DriverManager.getConnection(url,username,password);
            return conn;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 释放资源
     * @param conn
     * @param stmt
     * @param rs
     */
    public static void release(Connection conn,Statement stmt,ResultSet rs){
        if(rs!=null){
            try {
                rs.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            rs=null;
        }
        if(stmt!=null){
            try {
                stmt.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            stmt = null;
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

测试代码

    public static void main(String[] args){ 
        System.out.println("---------------开始复制----------------");
        long startTime = System.currentTimeMillis();

        copyDataFromOneTable2AnotherWithSelectAndCreateSql("shop_T01","user_info","shop_T07","user_info");

        long endTime = System.currentTimeMillis();
        System.out.println("---------------结束复制----------------");
        System.out.println("整个过程耗时:"+(endTime-startTime)+"ms");
    }
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行结果:

测试结果: 
现在有一个数据库叫shop_t01,里面有一张表user_info,现在需要将这张表复制到一个新建的数据库shop_t07中 
源数据库和源数据表 
上图中可以看出,是没有shop_t07的,需要动态创建,并将user_info复制到该数据库中,执行完main函数之后

自动生成的目标数据库和导入的表格还有数据



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值