From 4e2adfe6d28eeeb70061ac8249bc293af71254eb Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 19 Jan 2021 17:03:38 +0800 Subject: [PATCH] change --- .../assets/tdengine-jdbc-connector.png | Bin 0 -> 42560 bytes .../webdocs/markdowndocs/connector-java-ch.md | 222 ++++++++++++------ 2 files changed, 154 insertions(+), 68 deletions(-) create mode 100644 documentation20/webdocs/assets/tdengine-jdbc-connector.png diff --git a/documentation20/webdocs/assets/tdengine-jdbc-connector.png b/documentation20/webdocs/assets/tdengine-jdbc-connector.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf1dd3fcc5ee222c4a8753efa2c95c5257314bf GIT binary patch literal 42560 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�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 Q7#a9Mt7@y{C|~ydAKdTIDgXcg literal 0 HcmV?d00001 diff --git a/documentation20/webdocs/markdowndocs/connector-java-ch.md b/documentation20/webdocs/markdowndocs/connector-java-ch.md index 7ba573d2e4..759dd43e1c 100644 --- a/documentation20/webdocs/markdowndocs/connector-java-ch.md +++ b/documentation20/webdocs/markdowndocs/connector-java-ch.md @@ -1,62 +1,62 @@ # Java Connector -Java连接器支持的系统有: -| **CPU类型** | x64(64bit) | | | ARM64 | ARM32 | -| ------------ | ------------ | -------- | -------- | -------- | -------- | -| **OS类型** | Linux | Win64 | Win32 | Linux | Linux | -| **支持与否** | **支持** | **支持** | **支持** | **支持** | **支持** | +TDengine 提供了遵循 JDBC 标准(3.0)API 规范的 `taos-jdbcdriver` 实现,可在 maven 的中央仓库 [Sonatype Repository][1] 搜索下载。 -Java连接器的使用请参见视频教程。 +`taos-jdbcdriver的` 实现包括 2 种形式: JDBC-JNI 和 JDBC-RESTful(taos-jdbcdriver-2.0.16 开始支持 JDBC-RESTful)。 JDBC-JNI 通过调用客户端 libtaos.so(或 taos.dll )的本地方法实现, JDBC-RESTful 则在内部封装了 RESTful 接口实现。 -TDengine 为了方便 Java 应用使用,提供了遵循 JDBC 标准(3.0)API 规范的 `taos-jdbcdriver` 实现。目前可以通过 [Sonatype Repository][1] 搜索并下载。 +![tdengine-connector](../assets/tdengine-jdbc-connector.png) -由于 TDengine 是使用 c 语言开发的,使用 taos-jdbcdriver 驱动包时需要依赖系统对应的本地函数库。 +上图显示了 3 种 Java 应用使用连接器访问 TDengine 的方式: -* libtaos.so - 在 linux 系统中成功安装 TDengine 后,依赖的本地函数库 libtaos.so 文件会被自动拷贝至 /usr/lib/libtaos.so,该目录包含在 Linux 自动扫描路径上,无需单独指定。 - -* taos.dll - 在 windows 系统中安装完客户端之后,驱动包依赖的 taos.dll 文件会自动拷贝到系统默认搜索路径 C:/Windows/System32 下,同样无需要单独指定。 +* JDBC-JNI:Java 应用在物理节点1(pnode1)上使用 JDBC-JNI 的 API ,直接调用客户端 API(libtaos.so 或 taos.dll)将写入和查询请求发送到位于物理节点2(pnode2)上的 taosd 实例。 +* RESTful:应用将 SQL 发送给位于物理节点2(pnode2)上的 RESTful 连接器,再调用客户端 API(libtaos.so)。 +* JDBC-RESTful:Java 应用通过 JDBC-RESTful 的 API ,将 SQL 封装成一个 RESTful 请求,发送给物理节点2的 RESTful 连接器。 -> 注意:在 windows 环境开发时需要安装 TDengine 对应的 [windows 客户端][14],Linux 服务器安装完 TDengine 之后默认已安装 client,也可以单独安装 [Linux 客户端][15] 连接远程 TDengine Server。 +TDengine 的 JDBC 驱动实现尽可能与关系型数据库驱动保持一致,但时序空间数据库与关系对象型数据库服务的对象和技术特征存在差异,导致 `taos-jdbcdriver` 与传统的 JDBC driver 也存在一定差异。在使用时需要注意以下几点: -TDengine 的 JDBC 驱动实现尽可能的与关系型数据库驱动保持一致,但时序空间数据库与关系对象型数据库服务的对象和技术特征的差异导致 taos-jdbcdriver 并未完全实现 JDBC 标准规范。在使用时需要注意以下几点: - -* TDengine 不提供针对单条数据记录的删除和修改的操作,驱动中也没有支持相关方法。 -* 由于不支持删除和修改,所以也不支持事务操作。 +* TDengine 目前不支持针对单条数据记录的删除操作。 +* 目前不支持事务操作。 * 目前不支持表间的 union 操作。 -* 目前不支持嵌套查询(nested query),对每个 Connection 的实例,至多只能有一个打开的 ResultSet 实例;如果在 ResultSet还没关闭的情况下执行了新的查询,TSDBJDBCDriver 则会自动关闭上一个 ResultSet。 - -## TAOS-JDBCDriver 版本以及支持的 TDengine 版本和 JDK 版本 - -| taos-jdbcdriver 版本 | TDengine 版本 | JDK 版本 | -| --- | --- | --- | -| 2.0.12 及以上 | 2.0.8.0 及以上 | 1.8.x | -| 2.0.4 - 2.0.11 | 2.0.0.0 - 2.0.7.x | 1.8.x | -| 1.0.3 | 1.6.1.x 及以上 | 1.8.x | -| 1.0.2 | 1.6.1.x 及以上 | 1.8.x | -| 1.0.1 | 1.6.1.x 及以上 | 1.8.x | - -## TDengine DataType 和 Java DataType - -TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对应类型转换如下: - -| TDengine DataType | Java DataType | -| --- | --- | -| TIMESTAMP | java.sql.Timestamp | -| INT | java.lang.Integer | -| BIGINT | java.lang.Long | -| FLOAT | java.lang.Float | -| DOUBLE | java.lang.Double | -| SMALLINT, TINYINT |java.lang.Short | -| BOOL | java.lang.Boolean | -| BINARY, NCHAR | java.lang.String | - -## 如何获取 TAOS-JDBCDriver +* 目前不支持嵌套查询(nested query)。 +* 对每个 Connection 的实例,至多只能有一个打开的 ResultSet 实例;如果在 ResultSet 还没关闭的情况下执行了新的查询,taos-jdbcdriver 会自动关闭上一个 ResultSet。 + + +## JDBC-JNI和JDBC-RESTful的对比 + + + + + + + + + + + + + + + + + + + + + + + + + + +
对比项JDBC-JNIJDBC-RESTful
支持的操作系统linux、windows全平台
是否需要安装 client需要不需要
server 升级后是否需要升级 client需要不需要
写入性能JDBC-RESTful 是 JDBC-JNI 的 50%~90%
查询性能JDBC-RESTful 与 JDBC-JNI 没有差别
+ + +## 如何获取 taos-jdbcdriver ### maven 仓库 目前 taos-jdbcdriver 已经发布到 [Sonatype Repository][1] 仓库,且各大仓库都已同步。 + * [sonatype][8] * [mvnrepository][9] * [maven.aliyun][10] @@ -67,30 +67,63 @@ maven 项目中使用如下 pom.xml 配置即可: com.taosdata.jdbc taos-jdbcdriver - 2.0.4 + 2.0.16 ``` ### 源码编译打包 -下载 [TDengine][3] 源码之后,进入 taos-jdbcdriver 源码目录 `src/connector/jdbc` 执行 `mvn clean package` 即可生成相应 jar 包。 +下载 [TDengine][3] 源码之后,进入 taos-jdbcdriver 源码目录 `src/connector/jdbc` 执行 `mvn clean package -Dmaven.test.skip=true` 即可生成相应 jar 包。 + -## 使用说明 + +## JDBC的使用说明 ### 获取连接 -#### 通过JdbcUrl获取连接 +#### 指定URL获取连接 + +通过指定URL获取连接,如下所示: + +```java +Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); +String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata"; +Connection conn = DriverManager.getConnection(jdbcUrl); +``` + +以上示例,使用 **JDBC-RESTful** 的 driver,建立了到 hostname 为 taosdemo.com,端口为 6041,数据库名为 test 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。 + +使用 JDBC-RESTful 接口,不需要依赖本地函数库。与 JDBC-JNI 相比,仅需要: + +1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”; +2. jdbcUrl 以“jdbc:TAOS-RS://”开头; +3. 使用 6041 作为连接端口。 + +如果希望获得更好的写入和查询性能,Java 应用可以使用 **JDBC-JNI** 的driver,如下所示: -通过指定的jdbcUrl获取连接,如下所示: ```java Class.forName("com.taosdata.jdbc.TSDBDriver"); String jdbcUrl = "jdbc:TAOS://taosdemo.com:6030/test?user=root&password=taosdata"; Connection conn = DriverManager.getConnection(jdbcUrl); ``` -以上示例,建立了到hostname为taosdemo.com,端口为6030(TDengine的默认端口),数据库名为test的连接。这个url中指定用户名(user)为root,密码(password)为taosdata。 + +以上示例,使用了 JDBC-JNI 的 driver,建立了到 hostname 为 taosdemo.com,端口为 6030(TDengine 的默认端口),数据库名为 test 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。 + +**注意**:使用 JDBC-JNI 的 driver,taos-jdbcdriver 驱动包时需要依赖系统对应的本地函数库。 + +* libtaos.so + 在 linux 系统中成功安装 TDengine 后,依赖的本地函数库 libtaos.so 文件会被自动拷贝至 /usr/lib/libtaos.so,该目录包含在 Linux 自动扫描路径上,无需单独指定。 + +* taos.dll + 在 windows 系统中安装完客户端之后,驱动包依赖的 taos.dll 文件会自动拷贝到系统默认搜索路径 C:/Windows/System32 下,同样无需要单独指定。 + +> 在 windows 环境开发时需要安装 TDengine 对应的 [windows 客户端][14],Linux 服务器安装完 TDengine 之后默认已安装 client,也可以单独安装 [Linux 客户端][15] 连接远程 TDengine Server。 + +JDBC-JNI 的使用请参见视频教程。 TDengine 的 JDBC URL 规范格式为: -`jdbc:TAOS://[host_name]:[port]/[database_name]?[user={user}|&password={password}|&charset={charset}|&cfgdir={config_dir}|&locale={locale}|&timezone={timezone}]` +`jdbc:[TAOS|TAOS-RS]://[host_name]:[port]/[database_name]?[user={user}|&password={password}|&charset={charset}|&cfgdir={config_dir}|&locale={locale}|&timezone={timezone}]` + url中的配置参数如下: * user:登录 TDengine 用户名,默认值 root。 * password:用户登录密码,默认值 taosdata。 @@ -99,13 +132,17 @@ url中的配置参数如下: * locale:客户端语言环境,默认值系统当前 locale。 * timezone:客户端使用的时区,默认值为系统当前时区。 -#### 使用JdbcUrl和Properties获取连接 -除了通过指定的jdbcUrl获取连接,还可以使用Properties指定建立连接时的参数,如下所示: + +#### 指定URL和Properties获取连接 + +除了通过指定的 URL 获取连接,还可以使用 Properties 指定建立连接时的参数,如下所示: ```java public Connection getConn() throws Exception{ Class.forName("com.taosdata.jdbc.TSDBDriver"); + // Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); String jdbcUrl = "jdbc:TAOS://taosdemo.com:6030/test?user=root&password=taosdata"; + // String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata"; Properties connProps = new Properties(); connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8"); connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8"); @@ -114,9 +151,10 @@ public Connection getConn() throws Exception{ return conn; } ``` -以上示例,建立一个到hostname为taosdemo.com,端口为6030,数据库名为test的连接。这个连接在url中指定了用户名(user)为root,密码(password)为taosdata,并在connProps中指定了使用的字符集、语言环境、时区等信息。 -properties中的配置参数如下: +以上示例,建立一个到 hostname 为 taosdemo.com,端口为 6030,数据库名为 test 的连接。注释为使用 JDBC-RESTful 时的方法。这个连接在 url 中指定了用户名(user)为 root,密码(password)为 taosdata,并在 connProps 中指定了使用的字符集、语言环境、时区等信息。 + +properties 中的配置参数如下: * TSDBDriver.PROPERTY_KEY_USER:登录 TDengine 用户名,默认值 root。 * TSDBDriver.PROPERTY_KEY_PASSWORD:用户登录密码,默认值 taosdata。 * TSDBDriver.PROPERTY_KEY_CONFIG_DIR:客户端配置文件目录路径,Linux OS 上默认值 /etc/taos ,Windows OS 上默认值 C:/TDengine/cfg。 @@ -124,10 +162,14 @@ properties中的配置参数如下: * TSDBDriver.PROPERTY_KEY_LOCALE:客户端语言环境,默认值系统当前 locale。 * TSDBDriver.PROPERTY_KEY_TIME_ZONE:客户端使用的时区,默认值为系统当前时区。 + + #### 使用客户端配置文件建立连接 -当使用JDBC连接TDengine集群时,可以使用客户端配置文件,在客户端配置文件中指定集群的firstEp、secondEp参数。 + +当使用 JDBC-JNI 连接 TDengine 集群时,可以使用客户端配置文件,在客户端配置文件中指定集群的 firstEp、secondEp参数。 如下所示: -1. 在java中不指定hostname和port + +1. 在 Java 应用中不指定 hostname 和 port ```java public Connection getConn() throws Exception{ Class.forName("com.taosdata.jdbc.TSDBDriver"); @@ -140,7 +182,7 @@ public Connection getConn() throws Exception{ return conn; } ``` -2. 在配置文件中指定firstEp和secondEp +2. 在配置文件中指定 firstEp 和 secondEp ``` # first fully qualified domain name (FQDN) for TDengine system firstEp cluster_node1:6030 @@ -155,17 +197,19 @@ secondEp cluster_node2:6030 # locale en_US.UTF-8 ``` -以上示例,jdbc会使用客户端的配置文件,建立到hostname为cluster_node1,端口为6030,数据库名为test的连接。当集群中firstEp节点失效时,JDBC会尝试使用secondEp连接集群。 -TDengine中,只要保证firstEp和secondEp中一个节点有效,就可以正常建立到集群的连接。 +以上示例,jdbc 会使用客户端的配置文件,建立到 hostname 为 cluster_node1、端口为 6030、数据库名为 test 的连接。当集群中 firstEp 节点失效时,JDBC 会尝试使用 secondEp 连接集群。 +TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可以正常建立到集群的连接。 -> 注意:这里的配置文件指的是调用JDBC Connector的应用程序所在机器上的配置文件,Linux OS 上默认值 /etc/taos/taos.cfg ,Windows OS 上默认值 C://TDengine/cfg/taos.cfg。 +> 注意:这里的配置文件指的是调用 JDBC Connector 的应用程序所在机器上的配置文件,Linux OS 上默认值 /etc/taos/taos.cfg ,Windows OS 上默认值 C://TDengine/cfg/taos.cfg。 #### 配置参数的优先级 -通过以上3种方式获取连接,如果配置参数在url、Properties、客户端配置文件中有重复,则参数的`优先级由高到低`分别如下: + +通过以上 3 种方式获取连接,如果配置参数在 url、Properties、客户端配置文件中有重复,则参数的`优先级由高到低`分别如下: 1. JDBC URL 参数,如上所述,可以在 JDBC URL 的参数中指定。 2. Properties connProps 3. 客户端配置文件 taos.cfg -例如:在url中指定了password为taosdata,在Properties中指定了password为taosdemo,那么,JDBC会使用url中的password建立连接。 + +例如:在 url 中指定了 password 为 taosdata,在 Properties 中指定了 password 为 taosdemo,那么,JDBC 会使用 url 中的 password 建立连接。 > 更多详细配置请参考[客户端配置][13] @@ -183,6 +227,7 @@ stmt.executeUpdate("use db"); // create table stmt.executeUpdate("create table if not exists tb (ts timestamp, temperature int, humidity float)"); ``` + > 注意:如果不使用 `use db` 指定数据库,则后续对表的操作都需要增加数据库名称作为前缀,如 db.tb。 ### 插入数据 @@ -193,6 +238,7 @@ int affectedRows = stmt.executeUpdate("insert into tb values(now, 23, 10.3) (now System.out.println("insert " + affectedRows + " rows."); ``` + > now 为系统内部函数,默认为服务器当前时间。 > `now + 1s` 代表服务器当前时间往后加 1 秒,数字后面代表时间单位:a(毫秒), s(秒), m(分), h(小时), d(天),w(周), n(月), y(年)。 @@ -214,6 +260,7 @@ while(resultSet.next()){ System.out.printf("%s, %d, %s\n", ts, temperature, humidity); } ``` + > 查询和操作关系型数据库一致,使用下标获取返回字段内容时从 1 开始,建议使用字段名称获取。 ### 订阅 @@ -248,7 +295,7 @@ while(true) { } ``` -`consume` 方法返回一个结果集,其中包含从上次 `consume` 到目前为止的所有新数据。请务必按需选择合理的调用 `consume` 的频率(如例子中的`Thread.sleep(1000)`),否则会给服务端造成不必要的压力。 +`consume` 方法返回一个结果集,其中包含从上次 `consume` 到目前为止的所有新数据。请务必按需选择合理的调用 `consume` 的频率(如例子中的 `Thread.sleep(1000)`),否则会给服务端造成不必要的压力。 #### 关闭订阅 @@ -265,8 +312,11 @@ resultSet.close(); stmt.close(); conn.close(); ``` + > `注意务必要将 connection 进行关闭`,否则会出现连接泄露。 + + ## 与连接池使用 **HikariCP** @@ -306,6 +356,7 @@ conn.close(); connection.close(); // put back to conneciton pool } ``` + > 通过 HikariDataSource.getConnection() 获取连接后,使用完成后需要调用 close() 方法,实际上它并不会关闭连接,只是放回连接池中。 > 更多 HikariCP 使用问题请查看[官方说明][5] @@ -356,6 +407,7 @@ public static void main(String[] args) throws Exception { connection.close(); // put back to conneciton pool } ``` + > 更多 druid 使用问题请查看[官方说明][6] **注意事项** @@ -370,10 +422,43 @@ server_status()| Query OK, 1 row(s) in set (0.000141s) ``` + + ## 与框架使用 * Spring JdbcTemplate 中使用 taos-jdbcdriver,可参考 [SpringJdbcTemplate][11] -* Springboot + Mybatis 中使用,可参考 [springbootdemo][12] +* Springboot + Mybatis 中使用,可参考 [springbootdemo + + + +## TAOS-JDBCDriver 版本以及支持的 TDengine 版本和 JDK 版本 + +| taos-jdbcdriver 版本 | TDengine 版本 | JDK 版本 | +| -------------------- | ----------------- | -------- | +| 2.0.12 及以上 | 2.0.8.0 及以上 | 1.8.x | +| 2.0.4 - 2.0.11 | 2.0.0.0 - 2.0.7.x | 1.8.x | +| 1.0.3 | 1.6.1.x 及以上 | 1.8.x | +| 1.0.2 | 1.6.1.x 及以上 | 1.8.x | +| 1.0.1 | 1.6.1.x 及以上 | 1.8.x | + + + +## TDengine DataType 和 Java DataType + +TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对应类型转换如下: + +| TDengine DataType | Java DataType | +| ----------------- | ------------------ | +| TIMESTAMP | java.sql.Timestamp | +| INT | java.lang.Integer | +| BIGINT | java.lang.Long | +| FLOAT | java.lang.Float | +| DOUBLE | java.lang.Double | +| SMALLINT, TINYINT | java.lang.Short | +| BOOL | java.lang.Boolean | +| BINARY, NCHAR | java.lang.String | + + ## 常见问题 @@ -381,7 +466,7 @@ Query OK, 1 row(s) in set (0.000141s) **原因**:程序没有找到依赖的本地函数库 taos。 - **解决方法**:windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,linux 下将建立如下软链 ` ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可。 + **解决方法**:windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可。 * java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform @@ -406,3 +491,4 @@ Query OK, 1 row(s) in set (0.000141s) [13]: https://www.taosdata.com/cn/documentation20/administrator/#%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE [14]: https://www.taosdata.com/cn/all-downloads/#TDengine-Windows-Client [15]: https://www.taosdata.com/cn/getting-started/#%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B + -- GitLab