使用jdbc操作ClickHouse

2018年07月01日 01:33:00 狮子头儿 阅读数 10501
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

  • 创建maven项目引入依赖

引入ClickHouse驱动包

  1.  
    <dependency>
  2.  
    <groupId>ru.yandex.clickhouse</groupId>
  3.  
    <artifactId>clickhouse-jdbc</artifactId>
  4.  
    <version>0.1.40</version>
  5.  
    </dependency>
  • 修改ClickHouse配置文件

vim /etc/clickhouse-server/config.xml

配置jdbc访问端口

<http_port>8123</http_port>

配置ip地址

  1.  
    <listen_host>::1</listen_host>
  2.  
    <listen_host>172.16.1.23</listen_host>

注:需要配置listen_host,不然会出现 Connection refused的情况,修改完成之后需要重启

  • 编写测试类
  1.  
    package com.zhangwq;
  2.  
     
  3.  
    import java.sql.*;
  4.  
    import java.util.ArrayList;
  5.  
    import java.util.HashMap;
  6.  
    import java.util.List;
  7.  
    import java.util.Map;
  8.  
     
  9.  
    /**
  10.  
    * @author zhangwq
  11.  
    * @date 2018/6/30 20:58
  12.  
    */
  13.  
    public class ClickHouseJDBC {
  14.  
    public static void main(String[] args) {
  15.  
    String sqlDB = "show databases";//查询数据库
  16.  
    String sqlTab = "show tables";//查看表
  17.  
    String sqlCount = "select count(*) count from ontime";//查询ontime数据量
  18.  
    exeSql(sqlDB);
  19.  
    exeSql(sqlTab);
  20.  
    exeSql(sqlCount);
  21.  
    }
  22.  
     
  23.  
    public static void exeSql(String sql){
  24.  
    String address = "jdbc:clickhouse://172.16.1.23:8123/default";
  25.  
    Connection connection = null;
  26.  
    Statement statement = null;
  27.  
    ResultSet results = null;
  28.  
    try {
  29.  
    Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
  30.  
    connection = DriverManager.getConnection(address);
  31.  
    statement = connection.createStatement();
  32.  
    long begin = System.currentTimeMillis();
  33.  
    results = statement.executeQuery(sql);
  34.  
    long end = System.currentTimeMillis();
  35.  
    System.out.println("执行("+sql+")耗时:"+(end-begin)+"ms");
  36.  
    ResultSetMetaData rsmd = results.getMetaData();
  37.  
    List<Map> list = new ArrayList();
  38.  
    while(results.next()){
  39.  
    Map map = new HashMap();
  40.  
    for(int i = 1;i<=rsmd.getColumnCount();i++){
  41.  
    map.put(rsmd.getColumnName(i),results.getString(rsmd.getColumnName(i)));
  42.  
    }
  43.  
    list.add(map);
  44.  
    }
  45.  
    for(Map map : list){
  46.  
    System.err.println(map);
  47.  
    }
  48.  
    } catch (Exception e) {
  49.  
    e.printStackTrace();
  50.  
    }finally {//关闭连接
  51.  
    try {
  52.  
    if(results!=null){
  53.  
    results.close();
  54.  
    }
  55.  
    if(statement!=null){
  56.  
    statement.close();
  57.  
    }
  58.  
    if(connection!=null){
  59.  
    connection.close();
  60.  
    }
  61.  
    } catch (SQLException e) {
  62.  
    e.printStackTrace();
  63.  
    }
  64.  
    }
  65.  
    }
  66.  
    }

启动项目测试,发现如下报错。

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

SLF4J: Defaulting to no-operation (NOP) logger implementation

pom引入slf4j相关文件引入依赖,并resource下添加log4j2.properties解决该问题

  1.  
    <dependency>
  2.  
    <groupId>org.apache.logging.log4j</groupId>
  3.  
    <artifactId>log4j-slf4j-impl</artifactId>
  4.  
    <version>2.11.0</version>
  5.  
    </dependency>
  • 查看输出结果
  1.  
    {name=default}
  2.  
    {name=system}
  3.  
    执行(show databases)耗时:2ms
  4.  
    {name=ontime}
  5.  
    执行(show tables)耗时:2ms
  6.  
    {name=zwqtest}
  7.  
    {name=zwqtestall}
  8.  
    执行(select count(*) count from ontime)耗时:98ms
  9.  
    {count=177920306}

使用jdbc操作ClickHouse的更多相关文章

  1. Java的JDBC操作

    Java的JDBC操作 [TOC] 1.JDBC入门 1.1.什么是JDBC JDBC从物理结构上来说就是java语言访问数据库的一套接口集合,本质上是java语言根数据库之间的协议.JDBC提供一组 ...

  2. hibernate4中使用Session doWork()方法进行jdbc操作(代码)

    Hibernate3.3.2版本中getSession().connection()已被弃用,hibernate4中官方推荐使用Session doWork()方法进行jdbc操作 首先看看Work接 ...

  3. jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

    day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...

  4. JDBC操作MySQL数据库案例

    JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...

  5. JavaWeb用Jdbc操作MySql数据库(一)

    一.添加开发包.在JavaWeb中用jdbc操作数据库,使用方法与java一样,但是在处理开发包的问题上有点差别.JavaWeb不能将mysql-connector-java-5.1.7-bin.ja ...

  6. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  7. 使用JdbcTemplate简化JDBC操作 实现数据库操作

    使用Spring JDBC框架方遍简单的完成JDBC操作,满足性能的需求且灵活性高. Spring JDBC框架由4个部分组成,即core.datasource.object.support. org ...

  8. 用于JDBC操作数据库的公共类

    /* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...

  9. jdbc操作mysql

    本文讲述2点: 一. jdbc 操作 MySQL .(封装一个JdbcUtils.java类,实现数据库表的增删改查) 1. 建立数据库连接 Class.forName(DRIVER); connec ...

随机推荐

  1. 邻居子系统 之 邻居项查找neigh_lookup、___neigh_lookup_noref

    概述 邻居项查找是通过neigh_lookup相关函数来进行的: ___neigh_lookup_noref,该函数根据输出设备和主键值(IPv4为下一跳ip地址)在邻居项hash表中查找,找到则返回 ...

  2. TCP输入 之 快速路径和慢速路径

    概述 快速路径:用于处理预期的,理想情况下的数据段,在这种情况下,不会对一些边缘情形进行检测,进而达到快速处理的目的: 慢速路径:用于处理那些非预期的,非理想情况下的数据段,即不满足快速路径的情况下数 ...

  3. MySQL 插件之 连接控制插件(Connection-Control)

    目录 插件介绍 插件安装 插件配置 插件介绍 MySQL 5.7.17 以后提供了Connection-Control插件用来控制客户端在登录操作连续失败一定次数后的响应的延迟.该插件可有效的防止客户 ...

  4. py matplotlib 多个figure同时画多个图以及多个图例多个折线图

    图例负号乱码的问题 import numpy as np  import matplotlib.pyplot as pltimport  matplotlibplt.rcParams['axes.un ...

  5. ip地址后面的斜杠24

    ip地址后面的斜杠24表示掩码位是24位的,即用32位二进制表示的子网掩码中有连续的24个“1”:11111111 11111111 11111111 00000000,将其转化为十进制,就是:255 ...

  6. sptringboot2.0实现aop

    题记:在项目需要对请求日志情形管理. 声明:参考博客https://blog.csdn.net/bombsklk/article/details/79143145 1.在pom.xml中加入依赖 &l ...

  7. 我非要捅穿这 Neutron(四)Open vSwitch in Neutron

    目录 文章目录 目录 前文列表 OvS In Neutron 网络拓扑 OvS In Neutron 网络实现模型 双节点混合平面网络 双节点网络拓扑 OvS Bridges 与初始流表项 OvS b ...

  8. java的几种上传文件方法

    这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartreso ...

  9. 安装Redis-cluster-gem install redis报错的解决方案

    错误描述: [root@eshop-cache01 local]# gem install redis ERROR: Loading command: install (LoadError) cann ...

  10. Codeforces--C2. Good Numbers (hard version)

    题目链接http://codeforces.com/contest/1249/problem/C2.这是道进制转换题,我们的目的是找到最小的一个每个位都是1的三进制数来表示一个十进制数n.做法是,先将 ...