clickhouse 有两种 JDBC 驱动实现。
官方驱动:
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.1.52</version>
</dependency>
三方提供的驱动:
<dependency>
<groupId>com.github.housepower</groupId>
<artifactId>clickhouse-native-jdbc</artifactId>
<version>1.6-stable</version>
</dependency>
两者间的主要区别如下:
a.驱动类加载路径不同,分别为 ru.yandex.clickhouse.ClickHouseDriver
和 com.github.housepower.jdbc.ClickHouseDriver
b.默认连接端口不同,分别为 8123 和 9000
C.连接协议不同,官方驱动使用 HTTP 协议,而三方驱动使用 TCP 协议
需要注意的是,两种驱动不可共用,同个项目中只能选择其中一种驱动。
代码示例
- 使用官方驱动:
a.先引入依赖
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.2.6</version>
</dependency>
b.编写链接测试类
package com.bie.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
public class ClickhouseUtils {
private static Connection connection = null;
static {
try {
Class.forName("ru.yandex.clickhouse.ClickHouseDriver");// 驱动包
String url = "jdbc:clickhouse://192.168.110.133:8123/system";// url路径
String user = "default";// 账号
String password = "";// 密码
connection = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from system.functions");
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= columnCount; i++) {
System.out.println(metaData.getColumnName(i) + ":" + resultSet.getString(i));
}
}
}
}
- 使用三方提供的驱动:
a.如果是引入依赖的写法,代码同上相似
b.编写测试类,代码如下:
public class ClickhouseUtils2 {
private static Connection connection = null;
static {
try {
Class.forName("com.github.housepower.jdbc.ClickHouseDriver");// 驱动包
String url = "jdbc:clickhouse://192.168.110.133:8123/system";// url路径
String user = "default";// 账号
String password = "";// 密码
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from system.functions");
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= columnCount; i++) {
System.out.println(metaData.getColumnName(i) + ":" + resultSet.getString(i));
}
}
}
}
通过 clickhouse-client 命令行界面查看表情况:
ck-master :) show tables;
SHOW TABLES
┌─name─────────┐
│ hits │
│ jdbc_example │
└──────────────┘