最近在学习clickhouse,时间紧任务重。这两天看了很多资料,然后发现网上的有些不够详细,有些不够全面。个人感觉对新手不太友好,于是就写下了这篇文章,本意是帮助新手快速上手clickhouse,以及使用jdbc来连接clickhouse。
学习第一步,安装clickhouse。这里,我在公司接触到的是已经安装好的clickhouse。不过为了学习,我又在我个人的linux系统上安装了一遍。安装时,我参考的文章为安装详细连接大家在安装过程中可以去看一下,真的是很详细了。
对了,有一个小坑,在执行clickhouse-server文件的解压后的文件后,它在执行的过程中会出现让你为默认账户设置密码的选项。我当时也是没注意,然后就没有看到博主留意的话,设了个密码。其实可以直接不用管它的,当然了,可以根据自己的需要来选择是否设置密码。
安装完后,大家可以去学习一下基本的知识点。不过我感觉它的操作表呀,操作数据库呀等和Mysql有些类似。它也是支持SQL语法的,因此在这方面学起来还是非常快的。
接下来,当你熟悉一些基本操作时,可以jdbc连接clickhouse啦。这里真在的很坑,接下来这样做。
这个maven依赖是网上大部分博客所使用在依赖,流传度非常广。但是很不幸的是GitHub说这个maven依赖要停止维护了。于是需要从GitHub上下载第三方依赖。
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.1.52</version>
</dependency>
这个maven依赖是github上的,也是我所需要的。因此就以这个为例子进行操作。
<dependency>
<groupId>com.github.housepower</groupId>
<artifactId>clickhouse-native-jdbc</artifactId>
<version>2.2-stable</version>
</dependency>
maven依赖导入后,更新maven,然后开始进行基本操作小练习。
这里把创建数据表封装成了一个方法,测试的时候在main函数里调用就可以了。
/**
* 功能简介:创建数据表
* @throws ClassNotFoundException
* @throws SQLException
*/
public static void CreateTable() throws ClassNotFoundException, SQLException {
Class.forName("com.github.housepower.jdbc.ClickHouseDriver");
Connection connection = DriverManager.getConnection("jdbc:clickhouse://10.84.143.33:9000/test_01");
Statement statement = connection.createStatement();
statement.executeQuery("create table jdbc_example_01(day Date, name String, age UInt8) Engine=Log");
}
下面给出它在main方法中的代码。
/*执行创建数据库表操作*/
// try{
// CreateTable();
// System.out.println("------创建数据表成功!");
// }catch (Exception e){
// e.printStackTrace();
// System.out.println("-------创建数据库表失败!");
// }
/**
* 功能简介:向clickhouse中test_01数据库中往jabc_example中添加数据
*/
public static void InsertDate(){
try {
Class.forName("com.github.housepower.jdbc.ClickHouseDriver");
try {
Connection connection = DriverManager.getConnection("jdbc:clickhouse://10.84.143.33:9000/test_01");
PreparedStatement preparedStatement = connection.prepareStatement("insert into jdbc_example values(?,?,?)");
// 插入10条数据作为测试
for(int i = 0;i < 10; i++){
preparedStatement.setDate(1,new Date(System.currentTimeMillis()));
preparedStatement.setString(2,"pandda_"+(i+1));
preparedStatement.setInt(3,18);
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
System.out.println("------插入数据成功!");
} catch (SQLException throwables) {
throwables.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
这里只是为了简单的测试,就使用一个简单的全表查询。
/**
* 功能简介:从clickhouse中test_01数据库的jdbc_example表中查询数据,然后在控制台输出出来
*/
public static void QueryData(){
try {
Class.forName("com.github.housepower.jdbc.ClickHouseDriver");
Connection connection = DriverManager.getConnection("jdbc:clickhouse://10.84.143.33:9000/test_01");
Statement statement = connection.createStatement();
String sql = "select * from jdbc_example";
ResultSet resultSet = statement.executeQuery(sql);
/*输出查询后得到的数据*/
System.out.println("-------以下是查询后得到的数据------");
while (resultSet.next()){
System.out.println("日期;" + resultSet.getDate(1) +"姓名:" + resultSet.getString(2) + "年龄:" + resultSet.getInt(3));
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
/**
* 功能简介:把clickhouse中test_01数据库中的jdbc_example数据表给删除了
*/
public static void DropTable(){
try {
Class.forName("com.github.housepower.jdbc.ClickHouseDriver");
Connection connection = DriverManager.getConnection("jdbc:clickhouse://10.84.143.33:9000/test_01");
Statement statement = connection.createStatement();
//删除数据表的sql语句
String sql = "drop table jdbc_example";
statement.execute(sql);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
未完待更新