springBoot + clickHouse

本人开发环境:

springBoot +	jdk 1.8 +	eclipse

1.引入jar

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.12.RELEASE</version>
      </dependency>
<dependency>
		    <groupId>ru.yandex.clickhouse</groupId>
		    <artifactId>clickhouse-jdbc</artifactId>
		    <version>0.1.53</version>
		</dependency>

2.配置文件

spring:
  datasource: 
    clickhouse:
      address: jdbc:clickhouse://ip:端口
      username: default
      password:
      db: default
      socketTimeout: 600000

3.主要代码

package com.swap.scan.clickhouse;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import ru.yandex.clickhouse.ClickHouseConnection;
import ru.yandex.clickhouse.ClickHouseDataSource;
import ru.yandex.clickhouse.settings.ClickHouseProperties;

import java.sql.*;
import java.util.*;

@Slf4j
@Component
public class ClickHouseService {
	private static String clickhouseAddress;

	private static String clickhouseUsername;

	private static String clickhousePassword;

	private static String clickhouseDB;

	private static Integer clickhouseSocketTimeout;

	@Value("${spring.datasource.clickhouse.address}")
	public  void setClickhouseAddress(String address) {
		ClickHouseService.clickhouseAddress = address;
	}
	@Value("${spring.datasource.clickhouse.username}")
	public  void setClickhouseUsername(String username) {
		ClickHouseService.clickhouseUsername = username;
	}
	@Value("${spring.datasource.clickhouse.password}")
	public  void setClickhousePassword(String password) {
		ClickHouseService.clickhousePassword = password;
	}
	@Value("${spring.datasource.clickhouse.db}")
	public  void setClickhouseDB(String db) {
		ClickHouseService.clickhouseDB = db;
	}
	@Value("${spring.datasource.clickhouse.socketTimeout}")
	public  void setClickhouseSocketTimeout(Integer socketTimeout) {
		ClickHouseService.clickhouseSocketTimeout = socketTimeout;
	}

	public static Connection getConn() {

		ClickHouseConnection conn = null;
		ClickHouseProperties properties = new ClickHouseProperties();
		properties.setUser(clickhouseUsername);
		properties.setPassword(clickhousePassword);
		properties.setDatabase(clickhouseDB);
		properties.setSocketTimeout(clickhouseSocketTimeout);
		ClickHouseDataSource clickHouseDataSource = new ClickHouseDataSource(clickhouseAddress,properties);
		try {
			conn = clickHouseDataSource.getConnection();
			return conn;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void exeSql(String sql){
//		log.info("cliockhouse 执行sql:" + sql);
		Connection connection = getConn();
		try {
			Statement statement = connection.createStatement();
			ResultSet results = statement.executeQuery(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	public static List<Map<String,String>> selectSql(String sql){
//		log.info("cliockhouse 执行sql:" + sql);
		Connection connection = getConn();
		try {
			Statement statement = connection.createStatement();
			ResultSet results = statement.executeQuery(sql);
			ResultSetMetaData rsmd = results.getMetaData();
			List<Map<String,String>> list = new ArrayList<>();
			while(results.next()){
				Map<String,String> row = new HashMap<>();
				for(int i = 1;i<=rsmd.getColumnCount();i++){
					row.put(rsmd.getColumnName(i),results.getString(rsmd.getColumnName(i)));
				}
				list.add(row);
			}
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}
package com.swap.scan.clickhouse;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import ru.yandex.clickhouse.settings.ClickHouseProperties;
 
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class ClickHouseDataSourceProperties extends ClickHouseProperties{
 
    private String url;
 
}

需要手动修改sql,main方法直接调用接口使用

package com.swap.scan.clickhouse;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.swap.scan.entity.ScanBaseTransfer;

import cn.hutool.db.Page;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ClickHoseUtil {

	public static ClickHoseUtil getClickHoseUtil() {
		return new ClickHoseUtil();
	}
	public void select() {
		//String sql = "select * from aaa where 1= 1";
		String sql = sql;
		List<Map<String,String>> listMap = ClickHouseService.selectSql(sql);
		//List clickHouseList = JSONArray.parseArray(JSONObject.toJSONString(listMap),  vo.getClass()); 
		...
	}
	
	
	
	@SuppressWarnings("unchecked")
	public void selectByPage() {
		
//		String sql = "select * from aaa order by id limit  begin , PageSize";
		String sql = sql;
		List<Map<String,String>> list = ClickHouseService.selectSql(sql);
		@SuppressWarnings("rawtypes")
		//List clickHouseList = JSONArray.parseArray(JSONObject.toJSONString(list),  vo.getClass()); 
		...
	}
	
	public  void insert()  {
		try {
			String sql = "插入sql";
			ClickHouseService.exeSql(sql);
//			log.info("成功插入");
		} catch (Exception e) {
			log.error("存入失败",e);
		}
	}
 
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值