mod jdbc doc

This commit is contained in:
sheyanjie-qq 2024-07-31 17:18:07 +08:00
parent a675425f5d
commit d3a7058143
19 changed files with 142 additions and 149 deletions

View File

@ -25,8 +25,10 @@ public static void main(String[] args) throws SQLException {
// you can use the connection for execute SQL here
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}
// ANCHOR_END: main

View File

@ -14,8 +14,10 @@ public static void main(String[] args) throws SQLException {
// you can use the connection for execute SQL here
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}
// ANCHOR_END: main

View File

@ -16,14 +16,20 @@ public static void main(String[] args) throws SQLException {
String jdbcUrl = "jdbc:TAOS-RS://localhost:6041?user=root&password=taosdata";
Properties connProps = new Properties();
connProps.setProperty(TSDBDriver.PROPERTY_KEY_BATCH_LOAD, "true");
connProps.setProperty(TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT, "true");
connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
try (Connection conn = DriverManager.getConnection(jdbcUrl, connProps)){
System.out.println("Connected");
// you can use the connection for execute SQL here
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}
// ANCHOR_END: main

View File

@ -269,69 +269,11 @@ phpize && ./configure --enable-swoole && make -j && make install
<Tabs defaultValue="java" groupId="lang">
<TabItem label="Java" value="java">
Java 连接器建立连接的参数有 URL 和 properties下面分别详细介绍
Java 连接器建立连接的参数有 URL 和 Properties
TDengine 的 JDBC URL 规范格式为:
`jdbc:[TAOS|TAOS-RS]://[host_name]:[port]/[database_name]?[user={user}|&password={password}|&charset={charset}|&cfgdir={config_dir}|&locale={locale}|&timezone={timezone}]`
对于建立连接,原生连接与 REST 连接有细微不同。
**注**REST 连接中增加 `batchfetch` 参数并设置为 true将开启 WebSocket 连接。
**注意**:使用 JDBC 原生连接taos-jdbcdriver 需要依赖客户端驱动Linux 下是 libtaos.soWindows 下是 taos.dllmacOS 下是 libtaos.dylib
url 中的配置参数如下:
| 参数 | 描述 | 默认值 |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
| user | 登录 TDengine 用户名 | 'root' |
| password | 用户登录密码 | 'taosdata' |
| batchfetch | true在执行查询时批量拉取结果集false逐行拉取结果集。逐行拉取结果集使用 HTTP 方式进行数据传输。JDBC REST 连接支持批量拉取数据功能。taos-jdbcdriver 与 TDengine 之间通过 WebSocket 连接进行数据传输。相较于 HTTPWebSocket 可以使 JDBC REST 连接支持大数据量查询,并提升查询性能。 | false |
| charset | 当开启批量拉取数据时,指定解析字符串数据的字符集。 | |
| batchErrorIgnore | true在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false不再执行失败 SQL 后的任何语句。 | false |
| httpConnectTimeout | 连接超时时间,单位 ms | 60000 |
| httpSocketTimeout | socket 超时时间,单位 ms仅在 batchfetch 设置为 false 时生效。 | 60000 |
| messageWaitTimeout | 消息超时时间, 单位 ms仅在 batchfetch 设置为 true 时生效。 | 60000 |
| useSSL | 连接中是否使用 SSL。 | |
| httpPoolSize | REST 并发请求大小,默认 20。 | 20 |
**注意**部分配置项比如locale、timezone在 REST 连接中不生效。
除了通过指定的 URL 获取连接,还可以使用 Properties 指定建立连接时的参数。
properties 中的配置参数如下(**注意**:属性使用需要加上类名,如 `TSDBDriver.PROPERTY_KEY_USER`
| 属性 | 描述 | 默认值 |
| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | --------------- |
| PROPERTY_KEY_USER | 登录 TDengine 用户名 | 'root' |
| PROPERTY_KEY_PASSWORD | 用户登录密码 | 'taosdata' |
| PROPERTY_KEY_BATCH_LOAD | true在执行查询时批量拉取结果集false逐行拉取结果集 | false |
| PROPERTY_KEY_BATCH_ERROR_IGNORE | true在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQLfalse不再执行失败 SQL 后的任何语句 | false |
| PROPERTY_KEY_CONFIG_DIR | 仅在使用 JDBC 原生连接时生效。客户端配置文件目录路径Linux OS 上默认值 /etc/taosWindows OS 上默认值 C:/TDengine/cfg | 系统依赖 |
| PROPERTY_KEY_CHARSET | 客户端使用的字符集 | 系统字符集 |
| PROPERTY_KEY_LOCALE | 仅在使用 JDBC 原生连接时生效。客户端语言环境 | 系统当前 locale |
| PROPERTY_KEY_TIME_ZONE | 仅在使用 JDBC 原生连接时生效。客户端使用的时区 | 系统当前时区 |
| HTTP_CONNECT_TIMEOUT | 连接超时时间,单位 ms仅在 REST 连接时生效 | 60000 |
| HTTP_SOCKET_TIMEOUT | socket 超时时间,单位 ms仅在 REST 连接且 batchfetch 设置为 false 时生效 | 60000 |
| PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT | 消息超时时间, 单位 ms仅在 REST 连接且 batchfetch 设置为 true 时生效 | 60000 |
| PROPERTY_KEY_USE_SSL | 连接中是否使用 SSL。仅在 REST 连接时生效 | |
| HTTP_POOL_SIZE | REST 并发请求大小 | 20 |
| PROPERTY_KEY_ENABLE_COMPRESSION | 传输过程是否启用压缩。仅在使用 REST/Websocket 连接时生效 | false |
| PROPERTY_KEY_ENABLE_AUTO_RECONNECT | 是否启用自动重连。仅在使用 Websocket 连接时生效 | false |
| PROPERTY_KEY_RECONNECT_INTERVAL_MS | 自动重连重试间隔,单位毫秒。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效 | 2000 |
| PROPERTY_KEY_RECONNECT_RETRY_COUNT | 自动重连重试次数。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效 | 3 |
| PROPERTY_KEY_DISABLE_SSL_CERT_VALIDATION | 关闭 SSL 证书验证。仅在使用 Websocket 连接时生效 | false |
> **注意**:启用自动重连仅对简单执行 SQL 语句以及 无模式写入、数据订阅有效。对于参数绑定无效。自动重连仅对连接建立时通过参数指定数据库有效,对后面的 `use db` 语句切换数据库无效。
**配置参数的优先级:**
通过前面三种方式获取连接,如果配置参数在 url、Properties、客户端配置文件中有重复则参数的**优先级由高到低**分别如下:
1. JDBC URL 参数,如上所述,可以在 JDBC URL 的参数中指定。
2. Properties connProps
3. 使用原生连接时TDengine 客户端驱动的配置文件 taos.cfg
例如:在 url 中指定了 password 为 taosdata在 Properties 中指定了 password 为 taosdemo那么JDBC 会使用 url 中的 password 建立连接。
URL 和 Properties 的详细参数说明和如何使用详见 [API 说明](../../reference/connector/java/#url-规范)
</TabItem>
<TabItem label="Python" value="python">

View File

@ -7,7 +7,7 @@ toc_max_heading_level: 4
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
TDengine 提供了类似于消息队列产品的数据订阅和消费接口。在许多场景中采用TDengine 的时序大数据平台无须再集成消息队列产品从而简化应用程序设计并降低运维成本。本章介绍各语言连接器数据订阅的相关API以及使用方法。 数据订阅的基础知识请参考 [数据订阅](../../advanced/subscription/)
TDengine 提供了类似于消息队列产品的数据订阅和消费接口。在许多场景中,采用 TDengine 的时序大数据平台,无须再集成消息队列产品,从而简化应用程序设计并降低运维成本。本章介绍各语言连接器数据订阅的相关 API 以及使用方法。 数据订阅的基础知识请参考 [数据订阅](../../advanced/subscription/)
## 创建主题
请用 taos shell 或者 参考 [执行 SQL](../sql/) 章节用程序执行创建主题的 SQL`CREATE TOPIC IF NOT EXISTS topic_meters AS SELECT ts, current, voltage, phase, groupid, location FROM meters`
@ -16,7 +16,7 @@ TDengine 提供了类似于消息队列产品的数据订阅和消费接口。
**注意**
在 TDengine 连接器实现中,对于订阅查询,有以下限制。
- 查询语句限制:订阅查询只能使用 select 语句不支持其他类型的SQL如 insert、update或delete等。
- 查询语句限制:订阅查询只能使用 select 语句不支持其他类型的SQL如 insert、update delete 等。
- 原始始数据查询:订阅查询只能查询原始数据,而不能查询聚合或计算结果。
- 时间顺序限制:订阅查询只能按照时间正序查询数据。
@ -26,32 +26,29 @@ TDengine 消费者的概念跟 Kafka 类似,消费者通过订阅主题来接
### 创建参数
创建消费者的参数较多,非常灵活的支持了各种连接类型、 Offset 提交方式、压缩、重连、反序列化等特性,下面单独介绍各语言连接器创建消费者的参数。
创建消费者的参数较多,非常灵活的支持了各种连接类型、 Offset 提交方式、压缩、重连、反序列化等特性。各语言连接器都适用的通用基础配置项如下表所示:
| 参数名称 | 类型 | 参数说明 | 备注 |
| :-----------------------: | :-----: | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `td.connect.ip` | string | 服务端的 IP 地址 | |
| `td.connect.user` | string | 用户名 | |
| `td.connect.pass` | string | 密码 | |
| `td.connect.port` | integer | 服务端的端口号 | |
| `group.id` | string | 消费组 ID同一消费组共享消费进度 | <br />**必填项**。最大长度192。<br />每个topic最多可建立100个 consumer group |
| `client.id` | string | 客户端 ID | 最大长度192。 |
| `auto.offset.reset` | enum | 消费组订阅的初始位置 | <br />`earliest`: default(version < 3.2.0.0);从头开始订阅; <br/>`latest`: default(version >= 3.2.0.0);仅从最新数据开始订阅; <br/>`none`: 没有提交的 offset 无法订阅 |
| `enable.auto.commit` | boolean | 是否启用消费位点自动提交true: 自动提交客户端应用无需commitfalse客户端应用需要自行commit | 默认值为 true |
| `auto.commit.interval.ms` | integer | 消费记录自动提交消费位点时间间隔,单位为毫秒 | 默认值为 5000 |
| `msg.with.table.name` | boolean | 是否允许从消息中解析表名, 不适用于列订阅(列订阅时可将 tbname 作为列写入 subquery 语句从3.2.0.0版本该参数废弃恒为true | 默认关闭 |
| `enable.replay` | boolean | 是否开启数据回放功能 | 默认关闭 |
下面是各语言连接器创建参数:
<Tabs defaultValue="java" groupId="lang">
<TabItem value="java" label="Java">
Java 连接器创建消费者的参数为 Properties 可以设置如下参数:
Java 连接器创建消费者的参数为 Properties 可以设置的参数列表请参考 [API 说明](../../reference/connector/java/#消费者)
其他参数请参考上文通用基础配置项。
- td.connect.type: 连接方式。jni表示使用动态库连接的方式ws/WebSocket表示使用 WebSocket 进行数据通信。默认为 jni 方式。
- bootstrap.servers: TDengine 服务端所在的`ip:port`,如果使用 WebSocket 连接,则为 taosAdapter 所在的`ip:port`。
- enable.auto.commit: 是否允许自动提交。
- group.id: consumer: 所在的 group。
- value.deserializer: 结果集反序列化方法,可以继承 `com.taosdata.jdbc.tmq.ReferenceDeserializer`,并指定结果集 bean实现反序列化。也可以继承 `com.taosdata.jdbc.tmq.Deserializer`,根据 SQL 的 resultSet 自定义反序列化方式。
- httpConnectTimeout: 创建连接超时参数,单位 ms默认为 5000 ms。仅在 WebSocket 连接下有效。
- messageWaitTimeout: 数据传输超时参数,单位 ms默认为 10000 ms。仅在 WebSocket 连接下有效。
- httpPoolSize: 同一个连接下最大并行请求数。仅在 WebSocket 连接下有效。
- TSDBDriver.PROPERTY_KEY_ENABLE_COMPRESSION: 传输过程是否启用压缩。仅在使用 Websocket 连接时生效。true: 启用false: 不启用。默认为 false。
- TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT: 是否启用自动重连。仅在使用 Websocket 连接时生效。true: 启用false: 不启用。默认为 false。
- TSDBDriver.PROPERTY_KEY_RECONNECT_INTERVAL_MS: 自动重连重试间隔,单位毫秒,默认值 2000。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
- TSDBDriver.PROPERTY_KEY_RECONNECT_RETRY_COUNT: 自动重连重试次数,默认值 3仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
其他参数请参考:[Consumer 参数列表](../../develop/tmq/#数据订阅相关参数) 注意TDengine服务端自 3.2.0.0 版本开始消息订阅中的 auto.offset.reset 默认值发生变化。
:::note
- Java 连接器数据订阅 WebSocket 连接方式跟 原生连接方式,除了在创建消费者时参数不同之外,其他接口并无区别。因此我们以 Websocket 连接方式为例介绍数据订阅的其他功能。
:::
</TabItem>
<TabItem label="Python" value="python">
@ -81,6 +78,7 @@ Java 连接器创建消费者的参数为 Properties 可以设置如下参数
</Tabs>
### Websocket 连接
介绍各语言连接器使用 Websocket 连接方式创建消费者。
<Tabs defaultValue="java" groupId="lang">
<TabItem value="java" label="Java">
@ -128,6 +126,8 @@ Java 连接器创建消费者的参数为 Properties 可以设置如下参数
### 原生连接
介绍各语言连接器使用原生连接方式创建消费者。
<Tabs groupId="lang">
<TabItem value="java" label="Java">
@ -271,20 +271,27 @@ Java 连接器创建消费者的参数为 Properties 可以设置如下参数
<TabItem value="java" label="Java">
```java
// 获取订阅的 topicPartition
Set<TopicPartition assignment() throws SQLException;
// 获取 offset
// 获取当前消费者分配的 TopicPartition 集合
Set<TopicPartition> assignment() throws SQLException;
// 获取指定分区的当前偏移量
long position(TopicPartition partition) throws SQLException;
Map<TopicPartition, Long position(String topic) throws SQLException;
Map<TopicPartition, Long beginningOffsets(String topic) throws SQLException;
Map<TopicPartition, Long endOffsets(String topic) throws SQLException;
Map<TopicPartition, OffsetAndMetadata committed(Set<TopicPartition partitions) throws SQLException;
// 获取指定主题的所有分区的当前偏移量
Map<TopicPartition, Long> position(String topic) throws SQLException;
// 获取指定主题的所有分区的起始偏移量
Map<TopicPartition, Long> beginningOffsets(String topic) throws SQLException;
// 获取指定主题的所有分区的最新偏移量
Map<TopicPartition, Long> endOffsets(String topic) throws SQLException;
// 获取指定分区集合中的已提交偏移量
Map<TopicPartition, OffsetAndMetadata> committed(Set<TopicPartition> partitions) throws SQLException;
// 指定下一次 poll 中使用的 offset
// 设置指定分区的偏移量
void seek(TopicPartition partition, long offset) throws SQLException;
void seekToBeginning(Collection<TopicPartition partitions) throws SQLException;
void seekToEnd(Collection<TopicPartition partitions) throws SQLException;
// 将指定分区集合的偏移量设置为最开始
void seekToBeginning(Collection<TopicPartition> partitions) throws SQLException;
// 将指定分区集合的偏移量设置为最新
void seekToEnd(Collection<TopicPartition> partitions) throws SQLException;
```
示例代码:
@ -381,11 +388,16 @@ void seekToEnd(Collection<TopicPartition partitions) throws SQLException;
<TabItem value="java" label="Java">
```java
// 同步提交当前消费者的偏移量
void commitSync() throws SQLException;
void commitSync(Map<TopicPartition, OffsetAndMetadata offsets) throws SQLException;
// 同步提交指定的偏移量
void commitSync(Map<TopicPartition, OffsetAndMetadata> offsets) throws SQLException;
// 异步提交仅在 native 连接下有效
void commitAsync(OffsetCommitCallback<V callback) throws SQLException;
void commitAsync(Map<TopicPartition, OffsetAndMetadata offsets, OffsetCommitCallback<V callback) throws SQLException;
// 异步提交当前消费者的偏移量,需要提供回调以处理可能的提交结果
void commitAsync(OffsetCommitCallback<V> callback) throws SQLException;
// 异步提交指定的偏移量,需要提供回调以处理可能的提交结果
void commitAsync(Map<TopicPartition, OffsetAndMetadata> offsets, OffsetCommitCallback<V> callback) throws SQLException;
```
@ -584,6 +596,7 @@ void commitAsync(Map<TopicPartition, OffsetAndMetadata offsets, OffsetCommitCall
```
**注意**:这里的 value.deserializer 配置参数值应该根据测试环境的包路径做相应的调整。
其余代码请参考: [JDBC example](https://github.com/taosdata/TDengine/tree/3.0/examples/JDBC/JDBCDemo)
</TabItem>
<TabItem label="Python" value="python">
@ -630,6 +643,9 @@ void commitAsync(Map<TopicPartition, OffsetAndMetadata offsets, OffsetCommitCall
{{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/AbsConsumerLoopFull.java:consumer_demo}}
```
**注意**:这里的 value.deserializer 配置参数值应该根据测试环境的包路径做相应的调整。
其余代码请参考: [JDBC example](https://github.com/taosdata/TDengine/tree/3.0/examples/JDBC/JDBCDemo)
</TabItem>
<TabItem label="Python" value="python">

View File

@ -1348,18 +1348,23 @@ JDBC 标准不支持数据订阅,因此本章所有接口都是扩展接口。
- **异常**:如果创建失败,抛出 SQLException 异常。
创建消费者支持属性列表:
- td.connect.type: 连接方式。jni表示使用动态库连接的方式ws/WebSocket表示使用 WebSocket 进行数据通信。默认为 jni 方式。
- bootstrap.servers: TDengine 服务端所在的`ip:port`,如果使用 WebSocket 连接,则为 taosAdapter 所在的`ip:port`。
- enable.auto.commit: 是否允许自动提交。
- group.id: consumer: 所在的 group。
- value.deserializer: 结果集反序列化方法,可以继承 `com.taosdata.jdbc.tmq.ReferenceDeserializer`,并指定结果集 bean实现反序列化。也可以继承 `com.taosdata.jdbc.tmq.Deserializer`,根据 SQL 的 resultSet 自定义反序列化方式。
- httpConnectTimeout: 创建连接超时参数,单位 ms默认为 5000 ms。仅在 WebSocket 连接下有效。
- messageWaitTimeout: 数据传输超时参数,单位 ms默认为 10000 ms。仅在 WebSocket 连接下有效。
- httpPoolSize: 同一个连接下最大并行请求数。仅在 WebSocket 连接下有效。
- TSDBDriver.PROPERTY_KEY_ENABLE_COMPRESSION: 传输过程是否启用压缩。仅在使用 Websocket 连接时生效。true: 启用false: 不启用。默认为 false。
- TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT: 是否启用自动重连。仅在使用 Websocket 连接时生效。true: 启用false: 不启用。默认为 false。
- TSDBDriver.PROPERTY_KEY_RECONNECT_INTERVAL_MS: 自动重连重试间隔,单位毫秒,默认值 2000。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
- TSDBDriver.PROPERTY_KEY_RECONNECT_RETRY_COUNT: 自动重连重试次数,默认值 3仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
| 属性 | 描述 | 默认值 |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| td.connect.type | 连接方式。jni表示使用动态库连接的方式ws/WebSocket表示使用 WebSocket 进行数据通信。 | jni |
| bootstrap.servers | TDengine 服务端所在的ip:port如果使用 WebSocket 连接,则为 taosAdapter 所在的ip:port。 | |
| enable.auto.commit | 是否允许自动提交。 | |
| group.id | consumer 所在的 group。 | |
| value.deserializer | 结果集反序列化方法。可以继承 com.taosdata.jdbc.tmq.ReferenceDeserializer并指定结果集 bean实现反序列化。也可以继承 com.taosdata.jdbc.tmq.Deserializer根据 SQL 的 resultSet 自定义反序列化方式。 | |
| httpConnectTimeout | 创建连接超时参数,单位 ms。仅在 WebSocket 连接下有效。 | 5000 ms |
| messageWaitTimeout | 数据传输超时参数,单位 ms。仅在 WebSocket 连接下有效。 | 10000 ms |
| httpPoolSize | 同一个连接下最大并行请求数。仅在 WebSocket 连接下有效。 | |
| enableCompression | 传输过程是否启用压缩。仅在使用 Websocket 连接时生效。true: 启用false: 不启用。 | false |
| enableAutoReconnect | 是否启用自动重连。仅在使用 Websocket 连接时生效。true: 启用false: 不启用。 | false |
| reconnectIntervalMs | 自动重连重试间隔,单位毫秒。仅在 enableCompression 为 true 时生效。 | 2000 ms |
| reconnectRetryCount | 自动重连重试次数。仅在 enableCompression 为 true 时生效。 | 3 |
其他参数请参考:[Consumer 参数列表](../../develop/tmq/#数据订阅相关参数) 注意TDengine服务端自 3.2.0.0 版本开始消息订阅中的 auto.offset.reset 默认值发生变化。
- `public void subscribe(Collection<String> topics) throws SQLException`

View File

@ -38,8 +38,9 @@ config.setProperty("value.deserializer.encoding", "UTF-8");
try {
this.consumer = new TaosConsumer<>(config);
} catch (SQLException ex) {
// handle exception
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
throw new SQLException("Failed to create consumer", ex);
}
// ANCHOR_END: create_consumer
@ -63,9 +64,10 @@ try {
process(bean);
}
}
} catch (Exception ex){
// handle exception
System.out.println("SQLException: " + ex.getMessage());
} catch (SQLException ex){
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
} finally {
consumer.close();
@ -90,9 +92,10 @@ try {
consumer.commitSync();
}
}
} catch (Exception ex){
// handle exception
System.out.println("SQLException: " + ex.getMessage());
} catch (SQLException ex){
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
} finally {
consumer.close();
@ -105,9 +108,10 @@ try {
// ANCHOR: unsubscribe_data_code_piece
try {
consumer.unsubscribe();
} catch (Exception ex){
// handle exception
System.out.println("SQLException: " + ex.getMessage());
} catch (SQLException ex){
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
} finally {
consumer.close();
}

View File

@ -38,8 +38,9 @@ config.setProperty("value.deserializer.encoding", "UTF-8");
try {
this.consumer = new TaosConsumer<>(config);
} catch (SQLException ex) {
// handle exception
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
throw new SQLException("Failed to create consumer", ex);
}
// ANCHOR_END: create_consumer

View File

@ -109,8 +109,9 @@ try (Statement statement = connection.createStatement();
}
// ANCHOR_END: jdbc_exception
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}

View File

@ -43,8 +43,9 @@ try (Connection connection = DriverManager.getConnection(url, properties);
assert rowsAffected == 0;
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
// ANCHOR_END: create_db_and_table

View File

@ -41,8 +41,9 @@ try (Connection connection = DriverManager.getConnection(url, properties);
// you can check affectedRows here
System.out.println("insert " + affectedRows + " rows.");
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
// ANCHOR_END: insert_data
}

View File

@ -42,8 +42,9 @@ try (Connection connection = DriverManager.getConnection(url, properties);
System.out.printf("%s, %f, %s\n", ts, current, location);
}
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
// ANCHOR_END: query_data
}

View File

@ -42,8 +42,9 @@ try (Connection connection = DriverManager.getConnection(url, properties);
}
}
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
// ANCHOR_END: with_reqid
}

View File

@ -69,8 +69,9 @@ public class ParameterBindingBasicDemo {
pstmt.columnDataExecuteBatch();
}
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}

View File

@ -26,7 +26,9 @@ public class SchemalessJniTest {
conn.write(telnetDemo, SchemalessProtocolType.TELNET, SchemalessTimestampType.MILLI_SECONDS);
conn.write(jsonDemo, SchemalessProtocolType.JSON, SchemalessTimestampType.NOT_CONFIGURED);
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}

View File

@ -26,7 +26,9 @@ public class SchemalessWsTest {
conn.write(telnetDemo, SchemalessProtocolType.TELNET, SchemalessTimestampType.MILLI_SECONDS);
conn.write(jsonDemo, SchemalessProtocolType.JSON, SchemalessTimestampType.SECONDS);
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}

View File

@ -48,8 +48,9 @@ public class WSParameterBindingBasicDemo {
}
}
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}

View File

@ -36,7 +36,9 @@ public class WSParameterBindingDemo {
bindString(conn);
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}

View File

@ -38,7 +38,9 @@ public class WSParameterBindingFullDemo {
bindString(conn);
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
// handle any errors, please refer to the JDBC specifications for detailed exceptions info
System.out.println("Error Code: " + ex.getErrorCode());
System.out.println("Message: " + ex.getMessage());
}
}