JDBC druid流式读取mysql 亿级表,并将数据插入到doris

maven依赖

<properties>
    <java.version>1.8</java.version>
    <mysql.version>8.0.21</mysql.version>
    <druid.version>1.1.9</druid.version>
</properties>


<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

Main.class


import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.mysql.jdbc.Driver;

import java.sql.*;
import java.util.Properties;
import java.util.logging.Logger;
public class Main {
    public static void main(String[] args) {

        // 驱动程序名
        String driver = "com.mysql.cj.jdbc.Driver";
        // URL指向要访问的数据库名 test
        String url = "jdbc:mysql://192.168.10.1:3306/db_bigdata_saleflow?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
        // MySQL配置时的用户名
        String user = "root";
        // MySQL配置时的密码
        String password = "root";

        //mysql源
        DruidDataSource druidDataSource;

        // 遍历查询结果集
        try {
            
            //获取mysql-Source源
            druidDataSource = new DruidDataSource();
            druidDataSource.setUrl(url);
            druidDataSource.setUsername(user);
            druidDataSource.setPassword(password);
            druidDataSource.setDriver(new Driver());

            //初始化
            druidDataSource.init();
            //获取mysql连接
            DruidPooledConnection connection = druidDataSource.getConnection(50000L);

            PreparedStatement preparedStatement = connection.prepareStatement("select * from t_saleflow");

            //也可以修改jdbc url通过defaultFetchSize参数来设置,这样默认所以的返回结果都是通过流方式读取.
            preparedStatement.setFetchSize(Integer.MIN_VALUE);

            ResultSet resultSet = preparedStatement.executeQuery();
            //获取doris连接
            Connection dorisConn = DorisJDBCUtils.getconnection();

            String dorisInsert = "INSERT INTO t_saleflow_realtime" +
                    "(id, batch_date, companycode)" +
                    "VALUES(?,?,?)";
            PreparedStatement stmt = dorisConn.prepareStatement(dorisInsert);

            while (resultSet.next()){
                //简单的打印
                System.out.println(resultSet.getString(1));
               
                stmt.setString(1, resultSet.getString(1));
                stmt.setDate(2, resultSet.getDate(2));
                stmt.setString(3,resultSet.getString(3));
                
                stmt.addBatch();
                stmt.executeBatch();
            }

            DorisJDBCUtils.release(null, stmt, dorisConn);

            //完成之后关闭相关连接
            connection.close();
            druidDataSource.close();

        }
        catch (SQLException e) {
            // 数据库连接失败异常处理
            e.printStackTrace();
        }
        catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }


}

DorisJDBCUtils.class


//doris连接工具
import java.sql.*;

public class DorisJDBCUtils {
    private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    private static final String DB_URL_PATTERN = "jdbc:mysql://%s:%d/%s?rewriteBatchedStatements=true";
    private static final String HOST = "192.168.10.12"; // Leader Node host
    private static final int PORT = 9030;   // http port of Leader Node
    private static final String DB = "db_bigdata";
    private static final String TBL = "t_saleflow_realtime";
    private static final String USER = "root";
    private static final String PASSWD = "root";
    private static final int INSERT_BATCH_SIZE = 10000;

    Connection conn = null;
    PreparedStatement stmt = null;
    //加载驱动
    static{
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //获取连接(自己决定,封装到方法中)
    //static静态,直接使用类名.方法名更方便
    public static Connection getconnection() throws Exception{
        String url=String.format(DB_URL_PATTERN, HOST, PORT, DB);
        String user="historyOrder";
        String password="historyOrder";
        Connection conn=DriverManager.getConnection(url,user,password);
        return conn;
    }

    //释放资源
    public static void release(ResultSet rs,PreparedStatement stmt,Connection conn) throws Exception{
        if(rs!=null){
            rs.close();
        }
        if(stmt!=null){
            stmt.close();
        }
        if(conn!=null){
            conn.close();
        }
    }



}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值