java 操作clickhouse数据库

//  设置clickhouse 的参数,如:账户、密码
val properties = new ClickHouseProperties
properties.setSocketTimeout(ckTimeOut)
properties.setUser(ckUser)
properties.setPassword(ckPass)

1、clickhouse判断某表是否存在

/*
database: 数据库名
tablName: 表名
*/
def tableExists(database: String, tablName: String): Boolean = {
	//  获取 clickhouse连接 con
	val dataSource = new ClickHouseDataSource("clickhouse地址", properties)
    conn = dataSource.getConnection.asInstanceOf[ClickHouseConnectionImpl]
    val set = conn.getMetaData.getTables(null, database, tablName, null)
    if (set.next()) {
      return true
    } else {
      println("不存在")
      return false
    }
  }

2、判断是否存在该列

/*
tablesName:数据库名.表名
cols: 列名
*/

  def colsExists(tablesName: String, cols: String): Boolean = {
  	//  获取 clickhouse连接 con
  	val dataSource = new ClickHouseDataSource("clickhouse地址", properties)
    conn = dataSource.getConnection.asInstanceOf[ClickHouseConnectionImpl]
    //  创建statement 
    val statement = conn.createStatement()
    val resultSet = statement.executeQuery("select * from " + tablesName)
    println("select * from " + tablesName)
    val data = resultSet.getMetaData()
    val count = data.getColumnCount
    for (i <- 1 to count) {
      val str = data.getColumnName(i)
      println(str + cols)
      val bool = str.contains(cols)
      println(bool)
      return bool
    }
    return false
  }

3、创建表

  //创建所有节点的原始表表
  //  sql:sql语句
  // 注意:用户名和密码可以不写,不添加就可以
  def createTable(sql: String): Unit = {
    val arr: Array[String] = ckClusterUrl.split(",")
    import java.sql.{Connection, DriverManager}
    Class.forName("com.github.housepower.jdbc.ClickHouseDriver")
    println("表")
      val connection: Connection = DriverManager.getConnection("clickhouse地址", "用户名", "密码")
      val statement = connection.createStatement()
      statement.executeQuery(sql)
  }

4、获取数据库中所有表名

  // 获取数据库中所有表名
  // db: 数据库名
  // 数据库地址
  def getOherTables(db: String , ckMasterUrl:String):ArrayBuffer[String] ={
    val tableList = new ArrayBuffer[String]()
    val dataSource = new ClickHouseDataSource(ckMasterUrl, properties)
    val  conn = dataSource.getConnection.asInstanceOf[ClickHouseConnectionImpl]
    val set: ResultSet = conn.getMetaData.getTables(null, db, null, null)
    while (set.next()){
      val table = set.getString("TABLE_NAME")
      tableList += table
    }
    tableList
  }

5、根据某字段内容删除数据

//根据tables和tag删除表中数据
//db:数据库名
//table:表名
//resourceId: 一个字段值
  def deleteDateBytableAndTag(db: String, table: String, resourceId: String) = {
    try {
      val arr: Array[String] = ckClusterUrl.split(",")
      for (e <- arr) {
        val source = new ClickHouseDataSource(e, properties)
        val clickHouseConnectionImpl: ClickHouseConnectionImpl = source.getConnection.asInstanceOf[ClickHouseConnectionImpl]
        var sql = "ALTER TABLE " + db + "." + table + " DELETE WHERE" + " resourceId" + "='" + resourceId + "'"
        clickHouseConnectionImpl.createStatement().executeQuery(sql)
      }
    } catch {
      case e: Exception =>
        e.printStackTrace()
    }
  }

6、创建数据库库名

// 创建数据库库名
// dbName: 数据库名
def createDatabase(dbName: String): Unit ={
    val urls: Array[String] = ckClusterUrl.split(",")
    val sql = "create database " + dbName
    for (elem <- urls) {
    try{
      val source = new ClickHouseDataSource(elem , properties)
      val impl = source.getConnection().asInstanceOf[ClickHouseConnectionImpl]
      impl.createStatement().executeQuery(sql)
      println("创建 ==="+elem+ "======成功")
    }catch{
      case e:Exception =>
        e.printStackTrace()
        println("创建 ==="+elem+ "======失败")
      }
    }
  }

7、获取clickhouse数据库中的表的结构

  def readTaleType(database: String, table: String): String = {
    var str: String = null
    val sql = String.format("SHOW CREATE TABLE %s", database + "." + table)
    val statement = conn.prepareStatement(sql)
    val resultSet = statement.executeQuery()
    while (resultSet.next()) {
      str = resultSet.getString(1)
    }
    return str
  }
要在Java项目中引入ClickHouse数据库,需要遵循以下步骤: 1. 添加ClickHouseJava驱动程序依赖项:首先,在项目的构建文件(如Maven的pom.xml或Gradle的build.gradle)中添加ClickHouseJava驱动程序的依赖项。例如,对于Maven项目,可以在<dependencies>标签内添加以下依赖项: ``` <dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.3.1</version> </dependency> ``` 2. 创建数据库连接:在Java代码中,使用ClickHouse的JDBC驱动程序创建一个数据库连接。需要提供数据库的URL以及相关的认证信息(如用户名和密码)。以下是一个简单的连接示例: ``` String url = "jdbc:clickhouse://localhost:8123/mydb"; String user = "username"; String password = "password"; Connection connection = DriverManager.getConnection(url, user, password); ``` 3. 执行数据库操作:通过创建的数据库连接,可以执行各种数据库操作,如执行SQL查询、插入、更新和删除数据等。以下是一个执行查询的简单示例: ``` String query = "SELECT * FROM myTable"; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(query); while (resultSet.next()) { // 处理结果集 } ``` 4. 关闭数据库连接:在 Java 项目完成对 ClickHouse 数据库操作后,应使用 `close()` 方法显式地关闭数据库连接,以释放相关资源和断开连接: ``` connection.close(); ``` 以上是在Java项目中引入ClickHouse数据库的基本步骤。根据实际需求,在此基础上可以进一步深入学习和应用ClickHouse的特性和功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值