当前位置: 首页 > news >正文

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 

相关文章:

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

先上代码&#xff0c;里面有两种获取连接的方式&#xff0c;一个单例&#xff0c;一个连接池 package com.tdengine.utils;import com.alibaba.druid.pool.DruidDataSource;import java.sql.*; import java.util.Properties;public class TDConnectUtils {// 单例对象private …...

vue3项目执行npm install下载依赖报错问题排查方法

1、检查当前node与npm的版本 nodejs 和 npm 的版本是有适配的&#xff0c;具体可以看官网&#xff1a;nodejs 和 npm 的版本是有适配的 若是版本不兼容&#xff0c;修改node或者npm的版本即可&#xff0c;建议使用nvm版本管理工具&#xff0c;切换方便&#xff1b; 2、清除缓…...

【vue】项目迭代部署后 自动清除浏览器缓存

前言&#xff1a; vue项目打包部署上线后&#xff0c;因浏览器缓存问题&#xff0c;导致用户访问的依旧是上个迭代批次的旧资源&#xff0c;需要用户手动清除缓存才能更新至最新版本&#xff0c;影响用户体验。 解决方法&#xff1a; html根文件添加以下标签 <meta http-eq…...

Leetcode(滑动窗口习题思路总结,持续更新。。。)

讲解题目&#xff1a;长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target &#xff0c;找出该数组中满足其和 ≥ target 的长度最小的连续子数组。如果不存在符合条件的连续子数组&#xff0c;返回 0。示例: 输入: target 7, nums [2,3,1,2,4,3] 输出: 2 解…...

【UNIAPP】uniapp版图片压缩工具

二次封装的uniapp版本图片压缩、上传工具&#xff0c;支持全端&#xff08;H5、小程序、APP&#xff09; 新建文件&#xff1a;file-util.js class FileUtil {/*** [文件上传]* param {[object]} fileObj [图片地址]* param {[object]} formData [参数]* param {[str…...

PaddlePaddle 开源产业级文档印章识别PaddleX-Pipeline “seal_recognition”模型 开箱即用篇(一)

AI时代到来&#xff0c;各行各业都在追求细分领域垂直类深度学习模型&#xff0c;今天给大家介绍一个PaddlePaddle旗下&#xff0c;基于PaddleX Pipeline 来完成印章识别的模型“seal_recognition”。 官方地址&#xff1a;https://github.com/PaddlePaddle/PaddleX/blob/relea…...

Vue3 + Vite 项目引入 Typescript

文章目录 一、TypeScript简介二、TypeScript 开发环境搭建三、编译方式1. 自动编译单个文件2. 自动编译整个项目 四、配置文件1. compilerOptions基本选项严格模式相关选项&#xff08;启用 strict 后自动包含这些&#xff09;模块与导入相关选项 2. include 和 excludeinclude…...

微信小程序实战篇-分类页面制作

一、项目背景与目标 在微信小程序开发中&#xff0c;分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息&#xff0c;提升用户体验和操作效率。今天&#xff0c;我们将深入探讨如何制作一个实用的微信小程序分类页面&#xff0c;先来看一下…...

第三十七章 如何清理docker 日志

如何清理docker 日志 目标 掌握docker 日志设置掌握docker日志的清理办法背景 在现代软件开发和部署环境中,Docker 容器技术因其轻量级、可移植性和高效资源利用的特点,已成为许多企业和开发团队的首选。Docker 容器在运行过程中会产生大量的日志信息,这些日志对于监控容器…...

二刷代码随想录第七天

454. 四数相加 II 先用map记录前两个数的和num1 num2的值出现了多少次再在后两个数组里找0 - (num1 num2),找到后就累加map中的次数 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3…...

1.tree of thought (使用LangChain解决4x4数独问题)

本教程将介绍如何使用LangChain库和chatglm API来解决一个4x4的数独问题。我们将通过以下步骤实现这一目标&#xff1a; 初始化chatglm 的聊天模型。定义数独问题和解决方案。创建一个自定义的检查器来验证每一步的思考。使用ToTChain来运行整个思考过程。 1. 初始化chatglm4…...

网络基础(4)IP协议

经过之前的学习对传输协议的学习&#xff0c;对于传输协议从系统底层到应用层对于socket套接字的学习已经有了一套完整的理论。 对于网络的层状结构&#xff0c;现在已经学习到了应用层和传输层: 在之前的学习中&#xff0c;通信的双方都只考虑了双方的传输层的东西&#xff0…...

124. 二叉树中的最大路径和【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 124. 二叉树中的最大路径和 一、题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径…...

echarts:简单实现默认显示两柱子折线,点击按钮后显示新的柱子

问&#xff1a; 用echarts实现&#xff1a;默认显示两柱子折线&#xff0c;点击“税率”按钮&#xff0c;显示税率柱子&#xff0c;之前的两柱子折线消失 回答&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8…...

视频里的音频怎么提取出来成单独文件?音频提取照着这些方法做

在数字时代&#xff0c;视频与音频的分离与重组已成为日常需求之一。无论是出于制作背景音乐、保存讲座内容&#xff0c;还是编辑播客素材&#xff0c;提取视频中的音频并将其保存为单独文件都显得尤为重要。视频里的音频怎么提取出来成单独文件&#xff1f;本文将详细介绍几种…...

Excel——宏教程(精简版)

一、宏的简介 1、什么是宏&#xff1f; Excel宏是一种自动化工具&#xff0c;它允许用户录制一系列操作并将其转换为VBA(Visual Basic for Applications)代码。这样&#xff0c;用户可以在需要时执行这些操作&#xff0c;以自动化Excel任务。 2、宏的优点 我们可以利用宏来…...

C++中的std::tuple和std::pair

在C标准库中&#xff0c;std::tuple和std::pair是两种极具实用性的数据结构&#xff0c;它们都具备存储多个元素的功能&#xff0c;但各自有其独特的适用环境和特性。本文旨在深入探讨这两者之间的区别&#xff0c;并阐述在不同应用场景下应如何合理选择使用。 一、基本概念 s…...

引力搜索算法

引力搜索算法过程&#xff0c;包括了初始化、适应度评估、质量计算、加速度计算、更新速度和位置的一些步骤。 import numpy as np import random as rd from math import exp, sqrt import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotli…...

【时间之外】IT人求职和创业应知【35】-RTE三进宫

目录 新闻一&#xff1a;京东工业发布11.11战报&#xff0c;多项倍增数据体现工业经济信心提升 新闻二&#xff1a;阿里云100万核算力支撑天猫双11&#xff0c;弹性计算规模刷新纪录 新闻三&#xff1a;声网CEO赵斌&#xff1a;RTE将成为生成式AI时代AI Infra的关键部分 认知…...

Linux的目录结构

/ ├── bin # Binary - 存放用户可以直接使用的基本二进制可执行文件 ├── sbin # System Binaries - 存放系统管理员专用的二进制可执行文件 ├── usr # Unix System Resources - 存放用户使用的软件和库文件 │ ├── bin # Binary - 用户级应用程序…...

python: generator IDAL and DAL using sql server 2019

其它数据库也是一样的思维方式 create IDAL # encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎 # 描述&#xff1a; # Author : geovindu,Geovin Du 涂聚文. # IDE : P…...

命令执行简单

前言&#xff1a;小迪安全2022第一节反弹shell&#xff0c;小迪用的是两台都是云服务器&#xff0c;没有服务器可以在自己的主机上搭建也是可以的&#xff0c;主机上搭两个网站 思路&#xff1a;生成一个木马文件&#xff0c;下载到本机&#xff0c;然后利用本机上传到目标主机…...

【一句话经验】亚马逊云EC2 ubuntu24.04.1开启ROOT登录Permission denied (publickey)

按照常规的方法SSH登录会一直报错&#xff1a; Permission denied (publickey) 因为亚马逊云的默认配置不是在/etc/ssh/sshd_config&#xff0c;而是在引入的文件里了&#xff0c;所以在instance控制台输入这行命令来解除登录限制&#xff1a; sudo sed -i s/^PasswordAuthe…...

百度智能云千帆大模型平台引领企业创新增长

本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容&#xff0c;请访问&#xff1a; https://baiduworld.baidu.com 首先&#xff0c;跟大家分享一张图&#xff0c;这个是我们目前大模型应用落地的场景分布。可以看到&#xff0c;大模型…...

【Linux】深入理解GCC/G++编译流程及库文件管理

目录 1.背景知识 2.gcc/g如何完成编译 (1) 预处理&#xff08;进行宏替换&#xff09; (2) 编译&#xff08;生成汇编&#xff09; (3) 汇编&#xff08;生成机器可识别代码&#xff09; (4) 链接&#xff08;生成可执行文件或库文件&#xff09; (5) 总结 (6) 函数库 …...

【Unity基础】对比Unity中两种粒子系统

在Unity中&#xff0c;Particle System和Visual Effect Graph (VFX) 都是用于创建粒子效果的工具&#xff0c;但它们的设计目标、使用场景和功能特点有所不同。以下是详细对比&#xff1a; 1. Particle System 特点 传统粒子系统&#xff0c;Unity自带的模块化粒子特效工具。…...

琐碎笔记——pytest实现前置、后置、参数化、跳过用例执行以及重试

pytest的fixture中文介绍可参考&#xff08;不过文档稍微有点老&#xff09;&#xff1a; https://www.osgeo.cn/pytest/fixture.html#what-fixtures-are pytest各个作用域的fixture scope “function” 可作用于每个用例 fixture使用的声明放在类定义前面&#xff0c;类中的…...

C# 深层副本与浅层副本 深拷贝与浅拷贝

C# 深层副本与浅层副本 数据复制是编程中的重要任务。 对象是 OOP 中的复合数据类型。 对象中的成员字段可以按值或按引用存储。 可以以两种方式执行复制。 浅表副本将所有值和引用复制到新实例中。 引用所指向的数据不会被复制&#xff1b; 仅指针被复制。 新的引用指向原始…...

CH06_Lambda表达式

第6章&#xff1a;Lambda表达式 本章目标 为什么要学习C#编程语言 了解C#相关常识 C#开发工具Visual Studio安装 掌握C#程序的开发步骤 掌握C#的注释 掌握C#的常用转义符 本章内容 lambda表达式演变史 C# 匿名函数的演变历史可以追溯到 C# 语言的不同版本&#xff0c;…...

大模型本地部署实践:Ollama+Open-WebUI(MacOS)

目录 什么是Ollama Ollama安装 对话界面可视化&#xff1f;Open-WebUI&#xff01; 安装Open-WebUI 什么是Ollama Ollama是一个为简化大语言模型本地部署与交互的开源框架。它提供了用户友好的接口&#xff0c;帮助开发者和模型爱好者在没有依赖外部API的基础上高效地运行、…...

西安三桥网站建设/网站推广系统方案

首先要修改server.xml里面的Host主机信息<Host name"服务器的ip地址" appBase"webapps"unpackWARs"true" autoDeploy"true"> 然后如果要修改端口的话&#xff0c;默认是8080端口&#xff0c;改成80端口&#xff1a; <Connec…...

wordpress 安装后必装/网店seo是什么意思

excel文件的工作表保护&#xff0c;可以保护文件内容数据的正确性&#xff0c;不会轻易被修改&#xff0c;但是如果需要编辑文件也只需要将工作表保护撤销即可。 撤销步骤也很简单&#xff0c;打开excel文件&#xff0c;点击上方工具栏&#xff0c;找到【审阅】-【撤销工作表保…...

wordpress官网无法注册/seo研究中心vip课程

最近要参加一个比赛&#xff0c;需要用到深度学习的框架&#xff0c;老师建议我们用pytorch&#xff0c;但是安装的时候总是发现各种错误。 解决方案是&#xff1a;去pytorch官网生成下载的命令&#xff0c;然后再cmd上执行 这里我们发现有CUDA的选项&#xff0c;这就需要我们…...

免费做网站怎么做网站/宁波网站优化公司价格

首先打开idea 搜索&#xff1a;RunDashboard 添加配置&#xff1a; <option name"configurationTypes"><set><option value"SpringBootApplicationConfigurationType" /></set></option>...

政府部门做网站/互联网精准营销

1.开启root登录&#xff08;1&#xff09;删除/etc/ftpusers里的root&#xff08;2&#xff09;在proftpd.conf里添加如下配置&#xff1a;RootLogin on 2.配置匿名登录&#xff0c;对protfpd.conf做如下配置&#xff1a; <Anonymous /app> #匿名登录后进行ftp上传下…...

为什么网站在本地看没问题上传之后没有内容呢?/广安seo外包

我在“Now In Android”中学到的 9 件事 Now in Android是一款功能齐全的 Android 应用程序&#xff0c;完全使用 Kotlin 和 Jetpack Compose 构建。它遵循 Android 设计和开发最佳实践&#xff0c;旨在为开发人员提供有用的参考。 https://github.com/android/nowinandroid UI…...