clickhouse的jdbc的使用(单机版)

    首先需要启动clickhouse服务,这里面有一个坑,如果使用默认的启动,会出现外网根本访问不了服务的情况。就像这样:

我擦,默认是只监听了本地的服务,你使用本地是可以访问:

但是使用外网那是绝对访问不了的(因为我保证自己是关了防火墙和开放了端口的,还是没有屁用),官方给我们留的坑,这里需要改配置文件:

vi  /etc/clickhouse-server/config.xml

找到有ipv6的地方进行更改:

 

然后保存后重新启动服务既可:

sudo /etc/init.d/clickhouse-server restart

现在就正常了,可以监听所有的端口啦

这样我们也可以使用第三方的应用进行开发啦,我这里是用的java开发

package myfirstclick;



import java.sql.*;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;



public class ClickHouse {



    public static void main(String[] args) {

        String sqlDB = "show databases";//查询数据库

        String sqlTab = "show tables";//查看表

        String sqlCount = "select count(*) count from metrics";//查询ontime数据量

        exeSql(sqlDB);

        exeSql(sqlTab);

        exeSql(sqlCount);

    }



    public static void exeSql(String sql){

        String address = "jdbc:clickhouse://192.168.12.129:8123/test";

        Connection connection = null;

        Statement statement = null;

        ResultSet results = null;

        try {

            Class.forName("ru.yandex.clickhouse.ClickHouseDriver");

            connection = DriverManager.getConnection(address);

            statement = connection.createStatement();

            long begin = System.currentTimeMillis();

            results = statement.executeQuery(sql);

            long end = System.currentTimeMillis();

            System.out.println("执行("+sql+")耗时:"+(end-begin)+"ms");

            ResultSetMetaData rsmd = results.getMetaData();

            List<Map> list = new ArrayList();

            while(results.next()){

                Map map = new HashMap();

                for(int i = 1;i<=rsmd.getColumnCount();i++){

                    map.put(rsmd.getColumnName(i),results.getString(rsmd.getColumnName(i)));

                }

                list.add(map);

            }

            for(Map map : list){

                System.err.println(map);

            }

        } catch (Exception e) {

            e.printStackTrace();

        }finally {//关闭连接

            try {

                if(results!=null){

                    results.close();

                }

                if(statement!=null){

                    statement.close();

                }

                if(connection!=null){

                    connection.close();

                }

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }



}

    这个代码不是自己写的,是借鉴的一篇博客的。

    使用之前肯定要增加maven依赖,这里也是借鉴人家的,没有用官方提供的,官方(https://github.com/VirtusAI/clickhouse-client-java)提供的有的包用不了,我也不知道为什么。

<dependencies>

    <dependency>

        <groupId>ru.yandex.clickhouse</groupId>

        <artifactId>clickhouse-jdbc</artifactId>

        <version>0.1.40</version>

    </dependency>



    <dependency>

        <groupId>org.apache.logging.log4j</groupId>

        <artifactId>log4j-slf4j-impl</artifactId>

        <version>2.11.0</version>

    </dependency>



</dependencies>

    当然啦在运行程序之前还需要在clickhouse里面建库建表啦,当然也可以使用默认的库。

启动clickhouse的命令行:

[root@localhost clickhouse]# clickhouse-client

建库:

CREATE DATABASE IF NOT EXISTS myClickHouse;

建表:

CREATE TABLE metrics (device_id FixedString(36),metric String,time UInt64,value Float64)ENGINE = Memory;

最后我们还需要添加log4j2的配置文件,不然运行也会报错,这里也是网上找的模板。

<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="WARN">



    <!--全局参数-->

    <Properties>

        <Property name="pattern">%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n</Property>

        <Property name="logDir">/data/logs/dust-server</Property>

    </Properties>



    <Loggers>

        <Root level="INFO">

            <AppenderRef ref="console"/>

            <AppenderRef ref="rolling_file"/>

        </Root>

    </Loggers>



    <Appenders>

        <!-- 定义输出到控制台 -->

        <Console name="console" target="SYSTEM_OUT" follow="true">

            <!--控制台只输出level及以上级别的信息-->

            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout>

                <Pattern>${pattern}</Pattern>

            </PatternLayout>

        </Console>

        <!-- 同一来源的Appender可以定义多个RollingFile,定义按天存储日志 -->

        <RollingFile name="rolling_file"

                     fileName="${logDir}/dust-server.log"

                     filePattern="${logDir}/dust-server_%d{yyyy-MM-dd}.log">

            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout>

                <Pattern>${pattern}</Pattern>

            </PatternLayout>

            <Policies>

                <TimeBasedTriggeringPolicy interval="1"/>

            </Policies>

            <!-- 日志保留策略,配置只保留七天 -->

            <DefaultRolloverStrategy>

                <Delete basePath="${logDir}/" maxDepth="1">

                    <IfFileName glob="dust-server_*.log" />

                    <IfLastModified age="7d" />

                </Delete>

            </DefaultRolloverStrategy>

        </RollingFile>

    </Appenders>

</Configuration>

点击运行,结果如下:

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值