2-TDengine客户端连接,RESTful,JDBC

简介: 2-TDengine客户端连接,RESTful,JDBC

背景


上一篇的体验中,都是使用服务器本地的客户端连接后进行操作的,那么如何远程连接 TDengine 呢,比如:远程客户端,JDBC等。


TDengine提供了丰富的应用程序开发接口,其中包括C/C++、Java、Python、Go、Node.js、C# 、RESTful等,便于用户快速开发应用。这里使用三种方式连接下远程的 taosd 服务:


  1. RESTful Connector;
  2. Windows远程客户端;
  3. JDBC-JNI;


RESTful Connector


RESTful Connector 是最简单的远程连接方式,跨平台、无需安装任何客户端,直接发起 HTTP 请求即可。


TDengine 通过 HTTP POST 请求 BODY 中包含的 SQL 语句来操作数据库,仅需要一个 URL ,以下是在 Windows 10 操作系统上使用 curl 发送 HTTP 请求来体验。


Note: RESTful Connector 默认使用6041(实际取值是 serverPort + 11,因此可以通过修改 serverPort 参数的设置来修改)端口通信,所以在服务器端需要开放6041的TCP端口。


iptables -I INPUT -p TCP --dport 6041 -j ACCEPT
# RESTful Connector
# 不带认证信息,报错
cxzx-t580@Heartsuit MINGW64 /d/IoT
$ curl -d 'select * from db.t' hadoop1:6041/rest/sql
{"status":"error","code":4357,"desc":"no auth info input"}
# 附加用户名:密码,正常响应
cxzx-t580@Heartsuit MINGW64 /d/IoT
$ curl -u root:taosdata -d 'select * from db.t' hadoop1:6041/rest/sql
{"status":"succ","head":["ts","speed"],"column_meta":[["ts",9,8],["speed",4,4]],"data":[["2019-07-15 00:00:00.000",10],["2019-07-15 01:00:00.000",20]],"rows":2}
# 附加用户名:密码的Base64编码在头信息,正常响应
cxzx-t580@Heartsuit MINGW64 /d/IoT
$ curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'select * from db.t' hadoop1:6041/rest/sql
{"status":"succ","head":["ts","speed"],"column_meta":[["ts",9,8],["speed",4,4]],"data":[["2019-07-15 00:00:00.000",10],["2019-07-15 01:00:00.000",20]],"rows":2}
# 获取token
cxzx-t580@Heartsuit MINGW64 /d/IoT
$ curl hadoop1:6041/rest/login/root/taosdata
{"status":"succ","code":0,"desc":"/KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04"}
# 附加自定义token在头信息,正常响应
cxzx-t580@Heartsuit MINGW64 /d/IoT
$ curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'select * from db.t' hadoop1:6041/rest/sql
{"status":"succ","head":["ts","speed"],"column_meta":[["ts",9,8],["speed",4,4]],"data":[["2019-07-15 00:00:00.000",10],["2019-07-15 01:00:00.000",20]],"rows":2}
# 请求URL采用sqlt时,返回结果集的时间戳将采用Unix时间戳格式表示
cxzx-t580@Heartsuit MINGW64 /d/IoT
$ curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'select * from db.t' hadoop1:6041/rest/sqlt
{"status":"succ","head":["ts","speed"],"column_meta":[["ts",9,8],["speed",4,4]],"data":[[1563120000000,10],[1563123600000,20]],"rows":2}
# 请求URL采用sqlutc时,返回结果集的时间戳将采用UTC时间字符串表示
cxzx-t580@Heartsuit MINGW64 /d/IoT
$ curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'select * from db.t' hadoop1:6041/rest/sqlutc
{"status":"succ","head":["ts","speed"],"column_meta":[["ts",9,8],["speed",4,4]],"data":[["2019-07-15T00:00:00.000+0800",10],["2019-07-15T01:00:00.000+0800",20]],"rows":2}
# 创建数据库
cxzx-t580@Heartsuit MINGW64 /d/IoT
$ curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'create database ok' hadoop1:6041/rest/sql
{"status":"succ","head":["affected_rows"],"column_meta":[["affected_rows",4,4]],"data":[[0]],"rows":1}
# 删除数据库
cxzx-t580@Heartsuit MINGW64 /d/IoT
$ curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'drop database ok' hadoop1:6041/rest/sql
{"status":"succ","head":["affected_rows"],"column_meta":[["affected_rows",4,4]],"data":[[0]],"rows":1}

image.png


Widnows客户端


下载与服务器端版本一致的客户端:www.taosdata.com/assets-down…


Note:


  1. 客户端竟然直接安装到C盘下:C:\TDengine,不过考虑到默认的配置文件位置,可以理解。


  1. TDengine 默认使用6030端口通信,所以在服务器端需要开放6030的TCP端口。


# 在taos所在目录执行连接命令,报错了。。
C:\TDengine>taos -h 192.168.169.129
Welcome to the TDengine shell from Linux, Client Version:2.1.2.0
Copyright (c) 2020 by TAOS Data, Inc. All rights reserved.
taos connect failed, reason: Unable to establish connection.


这时,如果通过 JDBC-JNI 方式远程连接 TDengine 时:


spring.datasource.driver-class-name=com.taosdata.jdbc.TSDBDriver ,报错:


java.sql.SQLException: JNI ERROR (2354): JNI connection is NULL

解决方法:除了开启6030的 TCP 端口外,还需要开放6030的 UDP 端口: iptables -I INPUT -p UDP --dport 6030 -j ACCEPT

# 再次连接,成功
C:\TDengine>taos -h 192.168.169.129
Welcome to the TDengine shell from Linux, Client Version:2.1.2.0
Copyright (c) 2020 by TAOS Data, Inc. All rights reserved.
taos>

image.png


JDBC-JNI


使用官方的 Demogithub.com/taosdata/TD…


这些示例在安装的客户端目录也有: /usr/local/taos/examples/JDBC 或者 C:\TDengine\examples\JDBC


这里主要涉及到 JDBCDemo 项目下的 JDBCDemo.java 文件,其中的逻辑比较简单,就是一个主方法,实现建库、建表、插入数据、查询方法。


image.png

不过遇到了一些问题:


  1. 既然我用的是2.1.2.0的版本,可是下载的客户端自带示例的taos-jdbc依赖版本却五花八门。。


  1. JDBCDemo.java 报错,但是实际上已经跑通了。。


  1. JDBCDemo.java 中每条语句都正常执行,可是返回的却是Error。。

image.png

着实令人哭笑不得、摸不着头脑呀。


Note:


  • 因为 JDBC-JNI 使用的是 com.taosdata.jdbc. TSDBDriver ,连接 6030 端口,所以也需要开放TCP、UDP。
iptables -I INPUT -p TCP --dport 6030 -j ACCEPT
iptables -I INPUT -p UDP --dport 6030 -j ACCEPT
  • pom中关于taos-jdbc的依赖版本应与服务端、客户端保持兼容,默认是2.0.18,我改成了2.0.30
<dependency>
       <groupId>com.taosdata.jdbc</groupId>
       <artifactId>taos-jdbcdriver</artifactId>
       <version>2.0.30</version>
</dependency>

关于版本兼容性说明,见官方这个表:

image.png


目录
相关文章
|
6月前
|
Java 数据库连接 数据库
【YashanDB知识库】WAS配置YashanDB JDBC连接
【YashanDB知识库】WAS配置YashanDB JDBC连接
|
9月前
|
安全 Java 数据库连接
gbase8a JDBC常用特性-Kerberos认证方式连接
JDBC常用特性-Kerberos认证方式连接
|
9月前
|
Java 数据库连接 网络安全
JDBC常用特性-SSH隧道连接
JDBC常用特性-SSH隧道连接
|
Java 数据库连接
JDBC连接复习
JDBC连接复习
94 1
|
SQL Java 数据库连接
Java开发者必知:JDBC连接数据库的“三大法宝”
Java开发者必知:JDBC连接数据库的“三大法宝”
100 7
|
SQL Java 数据库连接
JDBC连接SQL Server2008 完成增加、删除、查询、修改等基本信息基本格式及示例代码
这篇文章提供了使用JDBC连接SQL Server 2008数据库进行增加、删除、查询和修改操作的基本步骤和示例代码。
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
713 0
|
Java 关系型数据库 MySQL
使用JDBC连接ADB
【8月更文挑战第6天】
264 0
|
SQL Java 关系型数据库
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
158 0

热门文章

最新文章