ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

通过JDBC方式连接ClickHouse

2022-05-25 08:31:55  阅读:196  来源: 互联网

标签:JDBC java String rs System 连接 import id ClickHouse


操作步骤

  1. 使用Eclipse或其他IDE工具创建Maven项目并引入ClickHouse驱动依赖包。  
    <dependency>
       <groupId>ru.yandex.clickhouse</groupId>
       <artifactId>clickhouse-jdbc</artifactId>
       <version>0.2.4</version>
    </dependency>
  2. 编写应用程序代码。 以下代码演示了如何使用JDBC驱动连接实例,使用过程需修改实例连接串和端口参数。如果应用和ClickHouse实例在同一个VPC环境,请使用实例VPC地址,如果不在相同的VPC环境则需使用实例外网地址,如何获取,请参见申请外网地址。  
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.Timestamp;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Main4 {
      private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
      private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat(DATE_FORMAT);
    
      public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException, ParseException {
        String url = "your url";
        String username = "your username";
        String password = "your password";
    
        Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
        String connectionStr = "jdbc:clickhouse://" + url + ":8123";
    
        try (Connection connection = DriverManager.getConnection(connectionStr, username, password);
             Statement stmt = connection.createStatement()) {
    
          {
            String createTableDDL = "create table test_table on cluster default " +
                "(id UInt32, " +
                "dt_str String, " +
                "dt_col DateTime) " +
                "engine=ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}')" +
                "partition by toYYYYMM(dt_col)" +
                "order by (id)" +
                "primary key (id)" +
                "sample by (id)" +
                "settings index_granularity = 8192;";
            stmt.execute(createTableDDL);
            System.out.println("create local table done.");
          }
          {
            String createTableDDL = "create table test_dist on cluster default " +
                "as default.test_table " +
                "engine=Distributed(default, default, test_table, rand());";
            stmt.execute(createTableDDL);
            System.out.println("create distributed table done");
          }
    
          System.out.println("write 100000 rows...");
          long startTime = System.currentTimeMillis();
    
          // Write 10 batch
          for (int batch = 0; batch < 10; batch++) {
            StringBuilder sb = new StringBuilder();
    
            // Build one batch
            sb.append("insert into test_dist values(" + (batch * 10000) + ", '2020-02-19 16:00:00', '2020-02-19 16:00:00')");
            for (int row = 1; row < 10000; row++) {
              sb.append(", (" + (batch * 10000 + row) + ", '2020-02-19 16:00:00', '2020-02-19 16:00:00')");
            }
    
            // Write one batch: 10000 rows
            stmt.execute(sb.toString());
          }
    
          long endTime = System.currentTimeMillis();
          System.out.println("total time cost to write 10W rows: " + (endTime - startTime) + "ms");
    
          Thread.sleep(2 * 1000);
    
          System.out.println("Select count(id)...");
          try (ResultSet rs = stmt.executeQuery("select count(id) from test_dist");) {
            while (rs.next()) {
              int count = rs.getInt(1);
              System.out.println("id count: " + count);
            }
          }
    
          try (ResultSet rs = stmt.executeQuery("select id, dt_str, dt_col from test_dist limit 10");) {
            while (rs.next()) {
              int id = rs.getInt(1);
              String dateStr = rs.getString(2);
              Timestamp time = rs.getTimestamp(3);
    
              String defaultDate = SIMPLE_DATE_FORMAT.format(new Date(time.getTime()));
              System.out.println("id: " + id
                  + ", date_str:" + dateStr
                  + ", date_col:" + defaultDate);
            }
          }
        }
      }
    }

标签:JDBC,java,String,rs,System,连接,import,id,ClickHouse
来源: https://www.cnblogs.com/zitjubiz/p/clickhouse_jdbc.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有