Java连接操作ClickHouse

ClickHouse 有两种 JDBC 驱动实现。

两者间的主要区别如下:

  • 驱动类加载路径不同,分别为 ru.yandex.clickhouse.ClickHouseDrivercom.github.housepower.jdbc.ClickHouseDriver
  • 默认连接端口不同,分别为 81239000(但经过测试,却是相反的)
  • 连接协议不同,官方驱动使用 HTTP 协议,而三方驱动使用 TCP 协议

方式一:官方驱动:pom 依赖

只能使用 9000 端口

<!--驱动为ru.yandex.clickhouse.ClickHouseDriver-->
<dependency>
    <groupId>ru.yandex.clickhouse</groupId>
    <artifactId>clickhouse-jdbc</artifactId>
    <version>0.3.1</version>
</dependency>
代码实现
package com.imooc.clickhouse;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 使用JDBC连接clickhouse
 * 官方驱动:ru.yandex.clickhouse.ClickHouseDriver 只能使用9000端口
 */
public class clickhouseJDBC {
    public static void main(String[] args) {
        try {
            Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
            String url = "jdbc:clickhouse://192.168.52.140:9000/default";
            String user = "default";
            String password = "";
            Connection conn = DriverManager.getConnection(url, user, password);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from default.smt_table");
            while (rs.next()){
                System.out.println(rs.getString(1));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

方式二:第三方驱动:pom 依赖

使用 8213 或者 9000 端口都可以连接

<!--驱动为com.github.housepower.jdbc.ClickHouseDriver-->
<dependency>
    <groupId>com.github.housepower</groupId>
    <artifactId>clickhouse-native-jdbc</artifactId>
    <version>1.6-stable</version>
</dependency>
代码实现
package com.imooc.clickhouse;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 使用JDBC连接clickhouse
 * 三方提供的驱动:com.github.housepower.jdbc.ClickHouseDriver 使用8213或者9000端口都可以连接
 */
public class clickhouseJDBC1 {
    public static void main(String[] args) {
        try {
            Class.forName("com.github.housepower.jdbc.ClickHouseDriver");
            String url = "jdbc:clickhouse://192.168.52.140:8123/default";
            String user = "default";
            String password = "";
            Connection conn = DriverManager.getConnection(url, user, password);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from default.smt_table");
            while (rs.next()){
                System.out.println(rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java项目中实现ClickHouse分页查询的方法: 1.使用JDBC连接ClickHouse数据库,并使用LIMIT和OFFSET子句进行分页查询。 ```java // 导入相关包 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ClickHousePageQuery { // ClickHouse数据库连接信息 private static final String DRIVER = "ru.yandex.clickhouse.ClickHouseDriver"; private static final String URL = "jdbc:clickhouse://localhost:8123/default"; private static final String USERNAME = "default"; private static final String PASSWORD = ""; public static void main(String[] args) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 加载ClickHouse驱动 Class.forName(DRIVER); // 获取数据库连接 conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); // 分页查询语句 String sql = "SELECT * FROM table_name LIMIT ? OFFSET ?"; // 创建PreparedStatement对象 ps = conn.prepareStatement(sql); // 设置每页显示的记录数 int pageSize = 10; ps.setInt(1, pageSize); // 设置查询的起始位置 int start = 0; ps.setInt(2, start); // 执行查询 rs = ps.executeQuery(); // 处理查询结果 while (rs.next()) { // TODO: 处理查询结果 } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭资源 try { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 2.使用第三方库pagehelper进行分页查询。 ```java // 导入相关包 import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import java.util.List; public class ClickHousePageQuery { public static void main(String[] args) { // 设置分页参数 int pageNum = 1; // 当前页码 int pageSize = 10; // 每页显示的记录数 // 开始分页 PageHelper.startPage(pageNum, pageSize); // 执行查询 List<Object> list = null; // TODO: 执行查询操作 // 封装分页结果 PageInfo<Object> pageInfo = new PageInfo<>(list); // 处理分页结果 List<Object> resultList = pageInfo.getList(); // 当前页的数据列表 int totalPage = pageInfo.getPages(); // 总页数 long totalRecord = pageInfo.getTotal(); // 总记录数 // TODO: 处理分页结果 } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值