Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
607fe1b7
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22017
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
607fe1b7
编写于
8月 23, 2021
作者:
Z
Zhiyu Yang
提交者:
GitHub
8月 23, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update docs.md
上级
26c2c00a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
88 deletion
+49
-88
documentation20/cn/08.connector/01.java/docs.md
documentation20/cn/08.connector/01.java/docs.md
+49
-88
未找到文件。
documentation20/cn/08.connector/01.java/docs.md
浏览文件 @
607fe1b7
...
...
@@ -2,8 +2,6 @@
## 总体介绍
TDengine 提供了遵循 JDBC 标准(3.0)API 规范的
`taos-jdbcdriver`
实现,可在 maven 的中央仓库
[
Sonatype Repository
](
https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver
)
搜索下载。
`taos-jdbcdriver`
的实现包括 2 种形式: JDBC-JNI 和 JDBC-RESTful(taos-jdbcdriver-2.0.18 开始支持 JDBC-RESTful)。 JDBC-JNI 通过调用客户端 libtaos.so(或 taos.dll )的本地方法实现, JDBC-RESTful 则在内部封装了 RESTful 接口实现。
![
tdengine-connector
](
page://images/tdengine-jdbc-connector.png
)
...
...
@@ -14,12 +12,10 @@ TDengine 提供了遵循 JDBC 标准(3.0)API 规范的 `taos-jdbcdriver` 实
*
RESTful:应用将 SQL 发送给位于物理节点2(pnode2)上的 RESTful 连接器,再调用客户端 API(libtaos.so)。
*
JDBC-RESTful:Java 应用通过 JDBC-RESTful 的 API ,将 SQL 封装成一个 RESTful 请求,发送给物理节点2的 RESTful 连接器。
TDengine 的 JDBC 驱动实现尽可能与关系型数据库驱动保持一致,但
时序空间数据库与关系对象型数据库服务的对象
和技术特征存在差异,导致
`taos-jdbcdriver`
与传统的 JDBC driver 也存在一定差异。在使用时需要注意以下几点:
TDengine 的 JDBC 驱动实现尽可能与关系型数据库驱动保持一致,但
TDengine与关系对象型数据库的使用场景
和技术特征存在差异,导致
`taos-jdbcdriver`
与传统的 JDBC driver 也存在一定差异。在使用时需要注意以下几点:
*
TDengine 目前不支持针对单条数据记录的删除操作。
*
目前不支持事务操作。
*
目前不支持嵌套查询(nested query)。
*
对每个 Connection 的实例,至多只能有一个打开的 ResultSet 实例;如果在 ResultSet 还没关闭的情况下执行了新的查询,taos-jdbcdriver 会自动关闭上一个 ResultSet。
### JDBC-JNI和JDBC-RESTful的对比
...
...
@@ -50,9 +46,12 @@ TDengine 的 JDBC 驱动实现尽可能与关系型数据库驱动保持一致
</tr>
</table>
注意:与 JNI 方式不同,RESTful 接口是无状态的,因此
`USE db_name`
指令没有效果,RESTful 下所有对表名、超级表名的引用都需要指定数据库名前缀。
注意:与 JNI 方式不同,RESTful 接口是无状态的。在使用JDBC-RESTful时,需要在sql中指定表、超级表的数据库名称。例如:
```
sql
INSERT
INTO
test
.
t1
USING
test
.
weather
(
ts
,
temperature
)
TAGS
(
'beijing'
)
VALUES
(
now
,
24
.
6
);
```
##
#
<a class="anchor" id="version"></a>TAOS-JDBCDriver 版本以及支持的 TDengine 版本和 JDK 版本
## <a class="anchor" id="version"></a>TAOS-JDBCDriver 版本以及支持的 TDengine 版本和 JDK 版本
| taos-jdbcdriver 版本 | TDengine 版本 | JDK 版本 |
| -------------------- | ----------------- | -------- |
...
...
@@ -65,7 +64,7 @@ TDengine 的 JDBC 驱动实现尽可能与关系型数据库驱动保持一致
| 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 DataType 和 Java DataType
TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对应类型转换如下:
...
...
@@ -82,36 +81,27 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对
| BINARY | byte array |
| NCHAR | java.lang.String |
## 安装
Java连接器支持的系统有: Linux 64/Windows x64/Windows x86。
**安装前准备:**
-
已安装TDengine服务器端
-
已安装好TDengine应用驱动,具体请参照
[
安装连接器驱动步骤
](
https://www.taosdata.com/cn/documentation/connector#driver
)
章节
## 安装Java Connector
TDengine 为了方便 Java 应用使用,遵循 JDBC 标准(3.0)API 规范提供了
`taos-jdbcdriver`
实现。可以通过
[
Sonatype Repository
](
https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver
)
搜索并下载。
由于 TDengine 的应用驱动是使用C语言开发的,使用 taos-jdbcdriver 驱动包时需要依赖系统对应的本地函数库。
### 安装前准备
使用Java Connector连接数据库前,需要具备以下条件:
1.
Linux或Windows操作系统
2.
Java 1.8以上运行时环境
3.
TDengine-client(使用JDBC-JNI时必须,使用JDBC-RESTful时非必须)
**注意**
:由于 TDengine 的应用驱动是使用C语言开发的,使用 taos-jdbcdriver 驱动包时需要依赖系统对应的本地函数库。
-
libtaos.so 在 Linux 系统中成功安装 TDengine 后,依赖的本地函数库 libtaos.so 文件会被自动拷贝至 /usr/lib/libtaos.so,该目录包含在 Linux 自动扫描路径上,无需单独指定。
-
taos.dll 在 Windows 系统中安装完客户端之后,驱动包依赖的 taos.dll 文件会自动拷贝到系统默认搜索路径 C:/Windows/System32 下,同样无需要单独指定。
注意:在 Windows 环境开发时需要安装 TDengine 对应的
[
windows 客户端
](
https://www.taosdata.com/cn/all-downloads/#TDengine-Windows-Client
)
,Linux 服务器安装完 TDengine 之后默认已安装 client,也可以单独安装
[
Linux 客户端
](
https://www.taosdata.com/cn/getting-started/#快速上手
)
连接远程 TDengine Server。
### 如何获取 TAOS-JDBCDriver
**maven仓库**
**注意**
:在 Windows 环境开发时需要安装 TDengine 对应的
[
windows 客户端
](
https://www.taosdata.com/cn/all-downloads/#TDengine-Windows-Client
)
,Linux 服务器安装完 TDengine 之后默认已安装 client,也可以单独安装
[
Linux 客户端
](
https://www.taosdata.com/cn/getting-started/#快速上手
)
连接远程 TDengine Server。
### 通过maven获取JDBC driver
目前 taos-jdbcdriver 已经发布到
[
Sonatype Repository
](
https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver
)
仓库,且各大仓库都已同步。
-
[
sonatype
](
https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver
)
-
[
mvnrepository
](
https://mvnrepository.com/artifact/com.taosdata.jdbc/taos-jdbcdriver
)
-
[
maven.aliyun
](
https://maven.aliyun.com/mvn/search
)
maven 项目中
使用如下 pom.xml 配置即可
:
maven 项目中
,在pom.xml 中添加以下依赖
:
```
xml-dtd
<dependency>
<groupId>com.taosdata.jdbc</groupId>
...
...
@@ -119,39 +109,22 @@ maven 项目中使用如下 pom.xml 配置即可:
<version>2.0.18</version>
</dependency>
```
**源码编译打包**
下载 TDengine 源码之后,进入 taos-jdbcdriver 源码目录
`src/connector/jdbc`
执行
`mvn clean package -Dmaven.test.skip=true`
即可生成相应 jar 包。
### 通过源码编译获取JDBC driver
### 示例程序
示例程序源码位于install_directory/examples/JDBC,有如下目录:
JDBCDemo JDBC示例源程序
JDBCConnectorChecker JDBC安装校验源程序及jar包
Springbootdemo springboot示例源程序
SpringJdbcTemplate SpringJDBC模板
### 安装验证
运行如下指令:
```
Bash
cd {install_directory}/examples/JDBC/JDBCConnectorChecker
java -jar JDBCConnectorChecker.jar -host <fqdn>
可以通过下载TDengine的源码,自己编译最新版本的java connector
```
shell
git clone https://github.com/taosdata/TDengine.git
cd
TDengine/src/connector/jdbc
mvn clean package
-Dmaven
.test.skip
=
true
```
验证通过将打印出成功信息。
编译后,在target目录下会产生taos-jdbcdriver-2.0.XX-dist.jar的jar包。
## Java连接器的使用
### 获取连接
#### 指定URL获取连接
通过指定URL获取连接,如下所示:
```
java
...
...
@@ -159,23 +132,19 @@ 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,如下所示:
```
java
Class
.
forName
(
"com.taosdata.jdbc.TSDBDriver"
);
String
jdbcUrl
=
"jdbc:TAOS://taosdemo.com:6030/test?user=root&password=taosdata"
;
Connection
conn
=
DriverManager
.
getConnection
(
jdbcUrl
);
```
以上示例,使用了 JDBC-JNI 的 driver,建立了到 hostname 为 taosdemo.com,端口为 6030(TDengine 的默认端口),数据库名为 test 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。
**注意**
:使用 JDBC-JNI 的 driver,taos-jdbcdriver 驱动包时需要依赖系统对应的本地函数库(Linux 下是 libtaos.so;Windows 下是 taos.dll)。
...
...
@@ -194,6 +163,9 @@ url中的配置参数如下:
*
charset:客户端使用的字符集,默认值为系统字符集。
*
locale:客户端语言环境,默认值系统当前 locale。
*
timezone:客户端使用的时区,默认值为系统当前时区。
*
batchfetch: 仅在使用JDBC-JNI时生效。true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:false。
*
timestampFormat: 仅在使用JDBC-RESTful时生效. 'TIMESTAMP':结果集中timestamp类型的字段为一个long值; 'UTC':结果集中timestamp类型的字段为一个UTC时间格式的字符串; 'STRING':结果集中timestamp类型的字段为一个本地时间格式的字符串。默认值为'STRING'。
*
batchErrorIgnore:true:在执行Statement的executeBatch时,如果中间有一条sql执行失败,继续执行下面的sq了。false:不再执行失败sql后的任何语句。默认值为:false。
#### 指定URL和Properties获取连接
...
...
@@ -222,11 +194,13 @@ properties 中的配置参数如下:
*
TSDBDriver.PROPERTY_KEY_CHARSET:客户端使用的字符集,默认值为系统字符集。
*
TSDBDriver.PROPERTY_KEY_LOCALE:客户端语言环境,默认值系统当前 locale。
*
TSDBDriver.PROPERTY_KEY_TIME_ZONE:客户端使用的时区,默认值为系统当前时区。
*
TSDBDriver.PROPERTY_KEY_BATCH_LOAD: 仅在使用JDBC-JNI时生效。true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:false。
*
TSDBDriver.PROPERTY_KEY_TIMESTAMP_FORMAT: 仅在使用JDBC-RESTful时生效. 'TIMESTAMP':结果集中timestamp类型的字段为一个long值; 'UTC':结果集中timestamp类型的字段为一个UTC时间格式的字符串; 'STRING':结果集中timestamp类型的字段为一个本地时间格式的字符串。默认值为'STRING'。
*
TSDBDriver.PROPERTY_KEY_BATCH_ERROR_IGNORE:true:在执行Statement的executeBatch时,如果中间有一条sql执行失败,继续执行下面的sq了。false:不再执行失败sql后的任何语句。默认值为:false。
#### 使用客户端配置文件建立连接
当使用 JDBC-JNI 连接 TDengine 集群时,可以使用客户端配置文件,在客户端配置文件中指定集群的 firstEp、secondEp参数。如下所示:
1.
在 Java 应用中不指定 hostname 和 port
```
java
...
...
@@ -243,7 +217,6 @@ public Connection getConn() throws Exception{
```
2.
在配置文件中指定 firstEp 和 secondEp
```
# first fully qualified domain name (FQDN) for TDengine system
firstEp cluster_node1:6030
...
...
@@ -424,9 +397,9 @@ public void setNString(int columnIndex, ArrayList<String> list, int size) throws
```
其中 setString 和 setNString 都要求用户在 size 参数里声明表定义中对应列的列宽。
##
#
<a class="anchor" id="subscribe"></a>订阅
## <a class="anchor" id="subscribe"></a>订阅
###
#
创建
### 创建
```
java
TSDBSubscribe
sub
=
((
TSDBConnection
)
conn
).
subscribe
(
"topic"
,
"select * from meters"
,
false
);
...
...
@@ -440,7 +413,7 @@ TSDBSubscribe sub = ((TSDBConnection)conn).subscribe("topic", "select * from met
如上面的例子将使用 SQL 语句
`select * from meters`
创建一个名为
`topic`
的订阅,如果这个订阅已经存在,将继续之前的查询进度,而不是从头开始消费所有的数据。
###
#
消费数据
### 消费数据
```
java
int
total
=
0
;
...
...
@@ -458,7 +431,7 @@ while(true) {
`consume`
方法返回一个结果集,其中包含从上次
`consume`
到目前为止的所有新数据。请务必按需选择合理的调用
`consume`
的频率(如例子中的
`Thread.sleep(1000)`
),否则会给服务端造成不必要的压力。
###
#
关闭订阅
### 关闭订阅
```
java
sub
.
close
(
true
);
...
...
@@ -466,7 +439,7 @@ sub.close(true);
`close`
方法关闭一个订阅。如果其参数为
`true`
表示保留订阅进度信息,后续可以创建同名订阅继续消费数据;如为
`false`
则不保留订阅进度。
##
#
关闭资源
## 关闭资源
```
java
resultSet
.
close
();
...
...
@@ -478,19 +451,8 @@ conn.close();
## 与连接池使用
**HikariCP**
*
引入相应 HikariCP maven 依赖:
```
xml
<dependency>
<groupId>
com.zaxxer
</groupId>
<artifactId>
HikariCP
</artifactId>
<version>
3.4.1
</version>
</dependency>
```
*
使用示例如下:
### HikariCP
使用示例如下:
```
java
public
static
void
main
(
String
[]
args
)
throws
SQLException
{
...
...
@@ -522,19 +484,8 @@ conn.close();
> 通过 HikariDataSource.getConnection() 获取连接后,使用完成后需要调用 close() 方法,实际上它并不会关闭连接,只是放回连接池中。
> 更多 HikariCP 使用问题请查看[官方说明](https://github.com/brettwooldridge/HikariCP)。
**Druid**
*
引入相应 Druid maven 依赖:
```
xml
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
druid
</artifactId>
<version>
1.1.20
</version>
</dependency>
```
*
使用示例如下:
### Druid
使用示例如下:
```
java
public
static
void
main
(
String
[]
args
)
throws
Exception
{
...
...
@@ -580,6 +531,16 @@ Query OK, 1 row(s) in set (0.000141s)
*
Spring JdbcTemplate 中使用 taos-jdbcdriver,可参考
[
SpringJdbcTemplate
](
https://github.com/taosdata/TDengine/tree/develop/tests/examples/JDBC/SpringJdbcTemplate
)
*
Springboot + Mybatis 中使用,可参考
[
springbootdemo
](
https://github.com/taosdata/TDengine/tree/develop/tests/examples/JDBC/springbootdemo
)
### 示例程序
示例程序源码位于TDengine/test/examples/JDBC下:
*
JDBCDemo:JDBC示例源程序
*
JDBCConnectorChecker:JDBC安装校验源程序及jar包
*
Springbootdemo:springboot示例源程序
*
SpringJdbcTemplate:SpringJDBC模板
请参考:!
[
JDBC example
](
https://github.com/taosdata/TDengine/tree/develop/tests/examples/JDBC
)
## 常见问题
*
java.lang.UnsatisfiedLinkError: no taos in java.library.path
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录