tdengine学习笔记实战-jdbc连接tdengine数据库

 先上代码,里面有两种获取连接的方式,一个单例,一个连接池

package com.tdengine.utils;import com.alibaba.druid.pool.DruidDataSource;import java.sql.*;
import java.util.Properties;public class TDConnectUtils {// 单例对象private static volatile Connection instance = null;//连接池的方法private static DruidDataSource dataSource;static {String jdbcUrl = "jdbc:TAOS-RS://192.168.81.31:6041/log";dataSource = new DruidDataSource();dataSource.setDriverClassName("com.taosdata.jdbc.rs.RestfulDriver");dataSource.setUrl(jdbcUrl);dataSource.setUsername("root");dataSource.setPassword("taosdata");// pool configurationsdataSource.setInitialSize(10);// 初始连接数dataSource.setMinIdle(10);// 最小空闲连接数dataSource.setMaxActive(10);// 最大连接数dataSource.setMaxWait(30000);// 获取连接的最大等待时间,单位为毫秒dataSource.setTimeBetweenConnectErrorMillis(10000); // 连接错误重试间隔时间,单位为毫秒dataSource.setValidationQuery("SELECT 1"); // 验证连接是否有效的SQL语句dataSource.setTestOnBorrow(true); // 借出连接时验证dataSource.setTestOnReturn(false); // 归还连接时验证dataSource.setTestWhileIdle(true); // 空闲时验证dataSource.setPoolPreparedStatements(true); // 是否开启PSCachedataSource.setMaxPoolPreparedStatementPerConnectionSize(20); // 每个连接中PSCache的最大值}// 私有构造函数private TDConnectUtils() {// 防止外部实例化}/*    单例*/public static Connection getInstance() {if (instance == null) {synchronized (TDConnectUtils.class) {if (instance == null) {try {Class.forName("com.taosdata.jdbc.TSDBDriver");// 使用 REST 连接方式,不需要本地库String jdbcUrl = "jdbc:TAOS-RS://192.168.81.31:6041?user=root&password=taosdata";Properties connProps = new Properties();connProps.setProperty("charset", "UTF-8");connProps.setProperty("locale", "en_US.UTF-8");connProps.setProperty("timezone", "UTC-8");instance = DriverManager.getConnection(jdbcUrl, connProps);} catch (Exception e) {e.printStackTrace();throw new RuntimeException("Failed to connect to TDengine", e);}}}}return instance;}/*** 获取数据库连接** @return Connection 对象* @throws SQLException 如果获取连接失败*/public static Connection getConnections() throws SQLException {return dataSource.getConnection();}public static void main(String[] args) throws SQLException {// 测试获取连接Connection conn = TDConnectUtils.getConnections();PreparedStatement ps = conn.prepareStatement("show tables");ResultSet resultSet = ps.executeQuery();while (resultSet.next()) {System.out.println(resultSet.getString("table_name"));}}}

遇到的问题:报错解决方法

1,Failed to connect to jdbc:TAOS-WS://192.168.81.31:6041?user=root&password=taosdata, ErrCode: 0, ErrMessage: No suitable driver found for jdbc:TAOS-WS://192.168.81.31:6041?user=root&password=taosdata
java.sql.SQLException: No suitable driver found for jdbc:TAOS-WS://192.168.81.31:6041?

Failed to connect to jdbc:TAOS-WS://192.168.81.31:6041?user=root&password=taosdata, ErrCode: 0, ErrMessage: No suitable driver found for jdbc:TAOS-WS://192.168.81.31:6041?user=root&password=taosdata
java.sql.SQLException: No suitable driver found for jdbc:TAOS-WS://192.168.81.31:6041?user=root&password=taosdata
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:208)
at com.zla.tdengine.utils.TDConnect.getInstance(TDConnect.java:34)
at com.zla.tdengine.utils.TDConnect.main(TDConnect.java:53)

 首先确保已经在项目中添加了 TDengine JDBC 驱动依赖。如果使用 Maven,需要在 pom.xml 中添加:

<dependency><groupId>com.taosdata.jdbc</groupId><artifactId>taos-jdbcdriver</artifactId><version>3.3.3</version>
</dependency>

在代码中需要显式加载 JDBC 驱动。以下是修改后的代码: 

// ... existing code ...public static Connection getInstance() {if (instance == null) {synchronized (TDConnect.class) {if (instance == null) {try {// 添加这行来加载驱动Class.forName("com.taosdata.jdbc.TSDBDriver");// 连接信息String jdbcUrl = "jdbc:TAOS-WS://192.168.81.31:6041?user=root&password=taosdata";Properties connProps = new Properties();connProps.setProperty("enableAutoReconnect", "true");connProps.setProperty("charset", "UTF-8");connProps.setProperty("timezone", "UTC-8");// 获取连接instance = DriverManager.getConnection(jdbcUrl, connProps);System.out.println("Connected to " + jdbcUrl + " successfully.");} catch (SQLException ex) {System.out.printf("Failed to connect to %s, %sErrMessage: %s%n",jdbcUrl,ex instanceof SQLException ? "ErrCode: " + ex.getErrorCode() + ", " : "",ex.getMessage());ex.printStackTrace();throw new RuntimeException(ex);} catch (ClassNotFoundException e) {// 添加新的异常处理System.out.println("TDengine JDBC driver not found!");e.printStackTrace();throw new RuntimeException(e);}}}}return instance;}// ... existing code ...

 按照上述修改后还是报该错误,继续排查

JDBC 驱动​

taos-jdbcdriver 实现了 JDBC 标准的 Driver 接口,提供了 3 个实现类。

  • WebSocket 连接使用驱动类 com.taosdata.jdbc.ws.WebSocketDriver
  • 原生连接使用驱动类 com.taosdata.jdbc.TSDBDriver
  • REST 连接使用驱动类 com.taosdata.jdbc.rs.RestfulDriver

首先确认使用的是否是正确的 JDBC URL 格式。

WebSocket 连接
使用 JDBC WebSocket 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要:

  1. driverClass 指定为“com.taosdata.jdbc.ws.WebSocketDriver”;
  2. jdbcUrl 以“jdbc:TAOS-WS://”开头;
  3. 使用 6041 作为连接端口。

原生连接
jdbc:TAOS://taosdemo.com:6030/power?user=root&password=taosdata,使用了 JDBC 原生连接的 TSDBDriver,建立了到 hostname 为 taosdemo.com,端口为 6030(TDengine 的默认端口),数据库名为 power 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。

注意:使用 JDBC 原生连接,taos-jdbcdriver 需要依赖客户端驱动(Linux 下是 libtaos.so;Windows 下是 taos.dll;macOS 下是 libtaos.dylib)

REST 连接
使用 JDBC REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要:

  1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”;
  2. jdbcUrl 以“jdbc:TAOS-RS://”开头;
  3. 使用 6041 作为连接端口。

方案一:改为使用rest的方式连接,因为:

  • 不需要安装客户端
  • 不需要配置本地库
  • 跨平台兼容性更好
  • 部署更简单

如果你选择rest方式,只需要将 JDBC URL 改为使用 TAOS-RS 协议即可。这种方式使用 HTTP 协议进行通信,不需要本地库支持。

// ... existing code ...public static Connection getInstance() {if (instance == null) {synchronized (TDConnect.class) {if (instance == null) {try {Class.forName("com.taosdata.jdbc.TSDBDriver");// 使用 REST 连接方式,不需要本地库String jdbcUrl = "jdbc:TAOS-RS://192.168.81.31:6041?user=root&password=taosdata";Properties connProps = new Properties();connProps.setProperty("charset", "UTF-8");connProps.setProperty("locale", "en_US.UTF-8");connProps.setProperty("timezone", "UTC-8");instance = DriverManager.getConnection(jdbcUrl, connProps);} catch (Exception e) {e.printStackTrace();throw new RuntimeException("Failed to connect to TDengine", e);}}}}return instance;}
// ... existing code ...

方案二:

如果必须使用本地连接方式,需要:

1. 安装 TDengine 客户端

  • Windows: 下载并安装 TDengine 客户端程序
  • Linux: 使用包管理器安装 TDengine 客户端

2、设置环境变量:

Windows:

     SET PATH=%PATH%;C:\TDengine\driver 

- Linux: 

     export LD_LIBRARY_PATH=/usr/local/taos/driver:$LD_LIBRARY_PATH 

3、或者在代码中设置库路径:

// 在连接数据库之前添加
System.setProperty("java.library.path", "C:\\TDengine\\driver");  // Windows
// 或
System.setProperty("java.library.path", "/usr/local/taos/driver"); // Linux 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不同优化器对比

不同优化器的区别和作用 优化器是深度学习中用于调整网络参数&#xff08;如权重和偏置&#xff09;以最小化损失函数的算法。不同的优化器具有不同的特点&#xff0c;适用于不同的任务和数据集。 1. 常见优化器 (1) 随机梯度下降&#xff08;SGD&#xff09; 公式: W n e w…

揭开广告引擎的神秘面纱:如何在0.1秒内精准匹配用户需求?

目录 一、广告系统与广告引擎介绍 &#xff08;一&#xff09;广告系统与广告粗分 &#xff08;二&#xff09;广告引擎在广告系统中的重要性分析 二、广告引擎整体架构和工作过程 &#xff08;一&#xff09;一般概述 &#xff08;二&#xff09;核心功能架构图 三、标…

一个交替优化问题的求解

优化问题的背景 给出的优化目标是一个多变量的函数&#xff0c;形式如下&#xff1a; min ⁡ W , b , Y ∈ I n d , Z ∥ X T W 1 b T − Y ∥ F 2 γ ∥ W ∥ F 2 λ t r ( Z T 1 1 T Z ) μ 2 ∥ Y − Z 1 μ Λ ∥ F 2 \min_{W,b,Y\in Ind,Z}\left\|X^TW\mathbf{1}b^T…

freertos任务调度学习

首先创建任务&#xff0c;创建好任务后&#xff0c;开启任务调度器&#xff0c;任务才能执行 1.开启任务调度器 2.启动第一个任务 3.任务切换

初始ArKTs 2

一.类 1.1 声明 类声明引入一个新类型&#xff0c;并定义其字段、方法和构造函数。 定义类后&#xff0c;可以使用关键字new创建实例 可以使用对象字面量创建实例 在以下示例中&#xff0c;定义了Person类&#xff0c;该类具有字段firstname和lastname、构造函数和方法full…

在云服务器搭建 Docker

操作场景 本文档介绍如何在腾讯云云服务器上搭建和使用 Docker。本文适用于熟悉 Linux 操作系统&#xff0c;刚开始使用腾讯云云服务器的开发者。如需了解更多关于 Docker 相关信息&#xff0c;请参见 Docker 官方。 说明&#xff1a; Windows Subsystem for Linux&#xff…

【IDER、PyCharm】免费AI编程工具完整教程:ChatGPT Free - Support Key call AI GPT-o1 Claude3.5

文章目录 CodeMoss 简介CodeMoss 的模型集成如何安装和配置 CodeMossIDER 插件安装步骤 CodeMoss 的实战使用AI 问答功能代码优化与解释优化这段代码解释这段代码 文件上传与对话联网查询与 GPT 助手联网查询GPT 助手 提升开发效率的最佳实践结语更多文献 CodeMoss 简介 CodeM…

编译报错:protoc did not exit cleanly. Review output for more information.

目录标题 解决“protoc did not exit cleanly”的报错问题检查.proto文件的语法 解决“protoc did not exit cleanly”的报错问题 今天做的项目需要用到grpc&#xff0c;然后需要编写proto然后编译后实现grpc的具体方法&#xff01; 结果编译的时候报了protoc did not exit cl…

语义分割(semantic segmentation)

语义分割(semantic segmentation) 文章目录 语义分割(semantic segmentation)图像分割和实例分割代码实现 语义分割指将图片中的每个像素分类到对应的类别&#xff0c;语义区域的标注和预测是 像素级的&#xff0c;语义分割标注的像素级的边界框显然更加精细。应用&#xff1a…

【竞技宝】LOL-传奇杯:姿态飞机TP绕后一锤定音

北京时间2024年11月19日,英雄联盟第二届传奇杯正在如火如荼的进行之中。昨天迎来小组赛第四个比赛日,本日一共进行了七场小组赛的对决,那么在昨日上半场的四场比赛中,登场的各支队伍都取得了什么样的表现呢?接下来小宝为大家带来小组赛day4上半场的比赛战报。 OP(宁王队) 0-1 …

网络安全之信息收集-实战-1

请注意&#xff0c;本文仅供合法和授权的渗透测试使用&#xff0c;任何未经授权的活动都是违法的。 实战&#xff1a;补天公益src“吉林通用航空职业技术学院” 奇安信&#xff5c;用户登录https://www.butian.net/Loo/submit?cid64918 域名或ip&#xff1a;https://www.jlth…

【后端】版本控制

版本控制 1. 什么是版本控制&#xff1f; 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理…

【YOLOv11改进[注意力]】引入DA、FCA、SA、SC、SE + 含全部代码和详细修改方式

本文将进行在YOLOv11中引入DA、FCA、SA、SC、SE魔改v11,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 一 DA、FCA、SA、SC、SE ① DA 论文:Dual Attention Network for Scene Segm

【数据结构】链表解析与实战运用(1.8w字超详细解析)

目录 引言 链表概念及结构 链表的优缺点 链表的分类 1.单向或者双向 2.带头或者不带头 3.带循环或者非循环 单链表接口函数的实现 接口函数一览 创建空节点&打印链表 尾部插入 头部插入 尾部删除 头部删除 查找 在pos位置之后插入节点 在pos位置之前插入节…

UDP发送过程:copy_from_user调用路径跟踪

UDP发送过程&#xff0c;数据从用户空间复制到内核空间的copy_from_user调用路径跟踪 系统调用&#xff1a;sendto()------》__sys_sendto()------》 __sock_sendmsg() ----》sock_sendmsg_nosec() ------》 inet_sendmsg() ------》 udp_sendmsg()--------》 ip_make_skb()---…

(微信小程序)基于Spring Boot的校园失物招领平台的设计与实现(vue3+uniapp+mysql)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

如何通过统计来反映工业新产业发展情况

工业战略性新兴产业对经济全局和长远发展具有重大引领带动作用&#xff0c;如何通过统计来反映工业新产业发展情况&#xff1f; 战略性新兴产业是以重大技术突破和重大发展需求为基础&#xff0c;对经济社会全局和长远发展具有重大引领带动作用&#xff0c;知识技术密集、物质…

【Linux课程学习】:Linux的调试器-gdb的使用(常见指令,cgdb)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 安装cgdb&#xff1a; 基本环境 1检查gdb是否…

【超详细】C#基础-基本运算、语句

目录 1.基本运算 (1)运算符 ①赋值运算符 ②算术运算符 ③比较运算符 ④逻辑运算符 ⑤快捷运算符 ⑥一元运算符 ⑦位运算符 ⑧三元运算符 (2)基本类型转换 ①隐式转换 ②显示转换 ③Parse转换 ④Conver类 ⑤ToString 2.语句 (1)选择语句 ①if语句 ②switch…

搜维尔科技:基于Touch力反馈与VR技术的虚拟气管切开术的虚拟操作软件平台

基于Touch力反馈与VR技术的虚拟气管切开术的虚拟操作软件平台 搜维尔科技&#xff1a;基于Touch力反馈与VR技术的虚拟气管切开术的虚拟操作软件平台