Clickhouse(五) JDBC基础案例代码
1.背景
- Clickhouse作为大数据技术中解决OLAP解决方案之一,在处理结构化数据的存储和查询分析方面比传统方案有100–1000倍及以上差异。
- 个人实际验证对比,同样的数据查询,使用Clickhouse和Hive,有2400倍的时间差距,处理结构化数据时,Hive远远低于Clickhouse的效率。(Hive是Facebook推出的将SQL语句转换为mapreduce代码的框架,所以Hive查询本质是执行mapreduce代码)
- Clickhouse本质是一个数据库管理系统,可以存储,插入,查询数据(DBMS)。所以和MySQL很像,有命令行客户端和API来操作,针对Java,还有JDBC驱动来进行连接和操作,这一点对于Java编程是非常方便的。
4.感谢俄罗斯Yandex的开源行为

2.环境准备
- Windows 10
- 为了技术学习和工作方便,电脑硬件配置建议四核或者6核以上,16GB内存及以上,硬盘在500GB及以上。
- 如果可以上固态硬盘,强烈推荐上,不需要太大,256即可,将系统启动盘放在这里,软件安装在固态硬盘,启动速度会快很多;
- 2020年,可以考虑AMD的8核心笔记本或者Intel 9代或者10代的二手笔记本,咸鱼上有很多个人笔记本出售,小心鉴别,还是可以捞到好笔记本的
- 很多操作系统都会把闲置的内存当成硬盘的缓冲区,所以内存越大,程序加载和操作就会越快。Intel的傲腾内存技术就是从这个思路发展而来,并且发扬光大。让机械硬盘具备固态硬盘的读写速度。
- 同样的,如果内存不够用,操作系统也会占用部分硬盘空间来做虚拟缓存。所以系统盘放在固态硬盘上更合适。如果可以上支持NVME接口固态就更好,比SATA3接口的固态硬盘速度更快,因为是直接对接PCIE接口的,就是显卡插槽对应的接口,数据传输带宽是非常恐怖的,部分固态硬盘可以达到2000—3500MB的读写速度。以前的内存也就这个读写速度
- Idea 2020,也可以使用更早版本

- JDK 1.8环境,安装教程可以看我的这篇博客windows JDK安装教程
- Maven 环境,https://blog.youkuaiyun.com/xiaohu21/article/details/108137771
3.案例代码
package com.doit.clickhouse.test1;
import java.sql.*;
public class Test {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
Class<?> aClass = Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
String address = "jdbc:clickhouse://linux100:8123/default";
connection = DriverManager.getConnection(address);
statement = connection.createStatement();
resultSet = statement.executeQuery("select * from tb_a");
while (resultSet.next()){
String uid = resultSet.getString("uid");
String name = resultSet.getString("name");
System.out.println("字段 uid:" + uid + "name: " + name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(resultSet != null) {
resultSet.close();
}
if(statement != null) {
statement.close();
}
if(connection != null) {
connection.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
4.Clickhouse调用思考
- 本身Clickhouse是提供了C++接口的,所以Java原本是可以通过JNI对Clickhouse进行调用
- java为了降低程序员工作,针对各个数据库,推出了JDBC规范,让各个数据库厂商根据这个规范实现各自的数据库驱动。而Java程序员只需要替换以下驱动、连接地址等可配置信息,就可以换一种数据库而代码不需要变更。只需要更改配置信息即可
- 从更大角度来看,上述的JDBC代码,对比java文件IO流、HDFS的java api调用代码、MySQL的java api调用代码等等都是一样的套路。获取连接,进行读写查询等操作,关闭连接。
- 在目前公司级别的开发中,新技术层出不穷,各类框架更是争奇斗艳,同一个技术问题会有很多种技术方案,每种方案都会用到不同的技术。从最上层的API调用到底层源码实现,如果要逐一记住是不可能做到的事情,但是这些框架、源码本身的实现思想、解决问题的思路却往往都是相通的。这才是需要值得去归纳,总结,思考和学习的地方。
- 现在是 IT最好的时代,计算机广泛应用于各个行业,业务推动技术发展。各类技术资料包括源码都开放出来。能够在13年毕业后就进入到计算机行业,再到参与大数据这个方向的工作,见识到20年前的技术研究决定了现在业务基础的预见级别思想,让人热血沸腾。