jdbc 连接两个数据库,进行数据的转移

2022/6/11 2:20:13

本文主要是介绍jdbc 连接两个数据库,进行数据的转移,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一.源码

1.方式一((27条消息) java从一个数据库查询数据保存到另一个数据库(MySql)_Klay·的博客-CSDN博客_java从一个数据库导入另一个数据库)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;

public class jdbc {

    /**
     * 数据源
     */
    public void ImportDataByJdbc() {

        long startTime = System.currentTimeMillis();    //获取开始时间

        Connection conn = null;// 创建一个数据库连接
        PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
        ResultSet result = null;// 创建一个结果集对象
        try {
            Class.forName("com.mysql.jdbc.Driver");// 加载mysql驱动程序
            System.out.println("开始尝试连接cms数据库!");
            String url = "jdbc:mysql://192.168.0.111:3306/xhc?characterEncoding=utf-8&useSSL=false";//这是我测试用的源数据库连接
            String user = "root";// 用户名,系统默认的账户名
            String password = "root1234";// 你安装时选设置的密码
            conn = DriverManager.getConnection(url, user, password);// 获取连接
            System.out.println("cms连接成功!");

            String sql = "select id,username,pwd from tb_user";
            pre = conn.prepareStatement(sql);// 实例化预编译语句
            result = pre.executeQuery();// 执行查询

            //数据存入目标库处理
            importData(result);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
                // 注意关闭的顺序,最后使用的最先关闭
                if (result != null)
                    result.close();
                if (pre != null)
                    pre.close();
                if (conn != null)
                    conn.close();
                System.out.println("cms数据库连接已关闭!\n");

                long endTime = System.currentTimeMillis();    //获取结束时间
                System.out.println("程序运行时间:" + (endTime - startTime) + "ms \n");    //输出程序运行时间

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 目标库
     *
     * @param
     * @return
     */
    public String importData(ResultSet result) {

        Connection con = null;// 创建一个数据库连接
        PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
        ResultSet result2 = null;// 创建一个结果集对象

        try {
            Class.forName("com.mysql.jdbc.Driver");// 加载mysql驱动程序
            System.out.println("开始尝试连接omp数据库!");
            String url = "jdbc:mysql://127.0.0.1:3306/db1?characterEncoding=utf-8&useSSL=false";
            String user = "root";// 用户名,系统默认的账户名
            String password = "123456";// 你安装时选设置的密码
            con = DriverManager.getConnection(url, user, password);// 获取连接
            System.out.println("omp连接成功!");

            int num = 0;
            while (result.next()) {

                //在此处 可做数据处理

                String sql = "insert into tb_use(id,username,password) " +
                        " values( " +
                        result.getInt("id") + ",'" +
                        result.getString("username") + "','" +
                        result.getString("pwd") + "' )";// 预编译语句
                pre = con.prepareStatement(sql);// 实例化预编译语句
                pre.execute();
                pre.close();
                num = num + 1;
            }
            System.out.println("成功插入(" + num + ")条数据");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
                // 注意关闭的顺序,最后使用的最先关闭
                if (result != null)
                    result.close();
                if (pre != null)
                    pre.close();
                if (con != null)
                    con.close();
                System.out.println("omp数据库连接已关闭!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;

    }

    public static void main(String[] args) {
        jdbc jc = new jdbc();
        jc.ImportDataByJdbc();
    }
}

2.方式二

package com.itheima.pojo;

public class Account {

    private int id;
    private String name;
    private String pwd;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd=" + pwd +
                '}';
    }
}
package com.itheima.jdbc;

import com.itheima.pojo.Account;
import org.junit.Test;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * JDBC API 详解:ResultSet
 */
public class JDBCDemo5_ResultSet {

    /**
     * 执行DQL
     * @throws Exception
     */
    @Test
    public void testResultSet() throws  Exception {
       //1. 注册驱动
       //Class.forName("com.mysql.jdbc.Driver");
       //2. 获取连接:如果连接的是外部mysql并且端口是默认的 3306 可以简化书写
       String url = "jdbc:mysql://192.168.0.111:3306/xhc?useSSL=false";
       String name = "root";
       String pwd = "root1234";
       Connection conn = DriverManager.getConnection(url, name, pwd);
        //3. 获取连接:如果连接的是本机mysql并且端口是默认的 3306 可以简化书写
        String localurl = "jdbc:mysql://127.0.0.1:3306/db1?useSSL=false";
        String localusername = "root";
        String localpassword = "123456";
        Connection localconn = DriverManager.getConnection(localurl, localusername, localpassword);
       //4. 定义sql
        String sql = "select * from tb_user";


        //5. 获取statement对象
        Statement stmt = conn.createStatement();
        Statement localstmt = localconn.createStatement();
        List<Account> list = new ArrayList<>();
        //5. 执行sql
        ResultSet rs = stmt.executeQuery(sql);

        //6.创建集合
        //7. 处理结果,遍历rs中的所有数据,光标向下移动一行,并且判断当前行是否有数据
        while (rs.next()){

            Account account = new Account();
            //6.2 获取数据  getXxx()
            int id = rs.getInt("id");
            String username = rs.getString("username");
            String password = rs.getString("pwd");

            //赋值
            account.setId(id);
            account.setName(username);
            account.setPwd(password);
            // 存入集合
            list.add(account);

        }
        System.out.println(list);
        for (int i = 0; i < list.size(); i++) {
            String localsql = "INSERT INTO tb_use(id,username,password)  VALUES(\"" + list.get(i).getId() + "\",\"" + list.get(i).getName() + "\",\"" + list.get(i).getPwd()  + "\");";
            System.out.println(localsql);
            PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
            pre = localconn.prepareStatement(localsql);// 实例化预编译语句
            pre.execute();
            pre.close();
        }




        //7. 释放资源
        rs.close();
        stmt.close();
        conn.close();
        localstmt.close();
        localconn.close();

    }
}

二.遇到的问题

1.找不到 com.mysql.jdbc.Driver

(1)下载jar包(MySQL :: Begin Your Download)

(2)点击文件->项目结构->库,点击左上角+号,选择java,选择mysql-connector-java-5.1.48.jar,重新运行。

 



这篇关于jdbc 连接两个数据库,进行数据的转移的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程