diff --git a/docs/zh/08-develop/02-sql.md b/docs/zh/08-develop/02-sql.md index b7d781a9dc..4fef3c8659 100644 --- a/docs/zh/08-develop/02-sql.md +++ b/docs/zh/08-develop/02-sql.md @@ -15,7 +15,7 @@ TDengine 对 SQL 语言提供了全面的支持,允许用户以熟悉的 SQL ## 建库和表 以智能电表为例,展示如何使用连接器执行 SQL 来创建数据库和表。 - + ```java @@ -43,7 +43,7 @@ TDengine 对 SQL 语言提供了全面的支持,允许用户以熟悉的 SQL ## 插入数据 以智能电表为例,展示如何使用连接器执行 SQL 来插入数据。 - + ```java {{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcInsertDataDemo.java:insert_data}} @@ -74,7 +74,7 @@ NOW 为系统内部函数,默认为客户端所在计算机当前时间。 NOW ## 查询数据 以智能电表为例,展示如何使用各语言连接器执行 SQL 来查询数据,并将获取到的结果打印出来。 - + ```java @@ -114,7 +114,7 @@ reqId 可用于请求链路追踪,reqId 就像分布式系统中的 traceId 下面是各语言连接器设置 reqId 执行 SQL 的代码样例。 - + ```java diff --git a/docs/zh/08-develop/07-tmq.md b/docs/zh/08-develop/07-tmq.md index f704303a40..64b01eea54 100644 --- a/docs/zh/08-develop/07-tmq.md +++ b/docs/zh/08-develop/07-tmq.md @@ -22,7 +22,7 @@ TDengine 提供了类似于消息队列产品的数据订阅和消费接口。 ## 创建消费者 -TDengine 消费者的概念跟 Kafka 类似,是指使用 TDengine 数据库进行数据订阅的客户端应用程序。它通过订阅特定的主题来接收数据流,这些主题由 SQL 查询定义。消费者可以配置多种参数,如连接方式、服务器地址、自动提交偏移量、消费者组标识、反序列化方法等,以适应不同的数据处理需求。TDengine 支持通过 JNI 或 WebSocket 连接,提供了灵活的数据接收方式。此外,消费者还支持自动重连和数据传输压缩等高级功能,以确保数据的高效和稳定接收。 +TDengine 消费者的概念跟 Kafka 类似,消费者通过订阅主题来接收数据流。消费者可以配置多种参数,如连接方式、服务器地址、自动提交 Offset 等以适应不同的数据处理需求。有的语言连接器的消费者还支持自动重连和数据传输压缩等高级功能,以确保数据的高效和稳定接收。 ### 创建参数 @@ -179,9 +179,9 @@ Java 连接器创建消费者的参数为 Properties, 可以设置如下参数 {{#include examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/AbsConsumerLoop.java:poll_data_code_piece}} ``` -- `subscribe` 方法的参数含义如为:订阅的主题列表(即名称),支持同时订阅多个主题。 +- `subscribe` 方法的参数含义为:订阅的主题列表(即名称),支持同时订阅多个主题。 - `poll` 每次调用获取一个消息,一个消息中可能包含多个记录。 -- `ResultBean` 是我们自定义的一个内部类,其字段名和数据类型与列名和数据类型一一对应,这样根据 `value.deserializer` 属性对应的反序列化类可以反序列化出 `ResultBean` 类型的对象。 +- `ResultBean` 是我们自定义的一个内部类,其字段名和数据类型与列的名称和数据类型一一对应,这样根据 `value.deserializer` 属性对应的反序列化类可以反序列化出 `ResultBean` 类型的对象。 @@ -262,7 +262,7 @@ Java 连接器创建消费者的参数为 Properties, 可以设置如下参数 ## 指定订阅的 Offset -消费者可以指定从特定 Offset 开始读取分区中的消息,这允许消费者重读消息或跳过已处理的消息。本节展示各语言连接器如何指定订阅的 Offset。 +消费者可以指定从特定 Offset 开始读取分区中的消息,这允许消费者重读消息或跳过已处理的消息。下面展示各语言连接器如何指定订阅的 Offset。 ### Websocket 连接 @@ -385,6 +385,12 @@ void commitSync(Map diff --git a/docs/zh/14-reference/05-connector/14-java.mdx b/docs/zh/14-reference/05-connector/14-java.mdx index 04a8614043..47a0625b9b 100644 --- a/docs/zh/14-reference/05-connector/14-java.mdx +++ b/docs/zh/14-reference/05-connector/14-java.mdx @@ -224,7 +224,7 @@ TDengine 的 JDBC URL 规范格式为: JDBC 原生连接的使用请参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1955.html)。 -**使用 TDengine 客户端驱动配置文件建立连接 ** +**使用 TDengine 客户端驱动配置文件建立连接** 当使用 JDBC 原生连接连接 TDengine 集群时,可以使用 TDengine 客户端驱动配置文件,在配置文件中指定集群的 firstEp、secondEp 等参数。 此时在 JDBC url 中不指定 `hostname` 和 `port`。 配置如 `jdbc:TAOS://:/power?user=root&password=taosdata`。 @@ -235,7 +235,7 @@ TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可 ##### Websocket 和 REST 连接 -使用 JDBC REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要: +使用 JDBC Websocket 或 REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要: 1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”; 2. jdbcUrl 以“jdbc:TAOS-RS://”开头; diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/AbsConsumerLoop.java b/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/AbsConsumerLoop.java index 8b67f9298f..d3a484dc43 100644 --- a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/AbsConsumerLoop.java +++ b/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/AbsConsumerLoop.java @@ -74,6 +74,33 @@ try { // ANCHOR_END: poll_data_code_piece } + public void commitCodePiece() throws SQLException { +// ANCHOR: commit_code_piece +try { + consumer.subscribe(topics); + while (!shutdown.get()) { + ConsumerRecords records = consumer.poll(Duration.ofMillis(100)); + for (ConsumerRecord record : records) { + ResultBean bean = record.value(); + // process your data here + process(bean); + } + if (!records.isEmpty()) { + // after processing the data, commit the offset manually + consumer.commitSync(); + } + } +} catch (Exception ex){ + // handle exception + System.out.println("SQLException: " + ex.getMessage()); + +} finally { + consumer.close(); + shutdownLatch.countDown(); +} +// ANCHOR_END: commit_code_piece + } + public void unsubscribeCodePiece() throws SQLException { // ANCHOR: unsubscribe_data_code_piece try { diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcBasicDemo.java b/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcBasicDemo.java index 56f5eed264..ca5813710b 100644 --- a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcBasicDemo.java +++ b/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcBasicDemo.java @@ -96,9 +96,10 @@ aStmt.close(); String sql = "SELECT * FROM meters limit 2;"; // ANCHOR: jdbc_exception -try (Statement statement = connection.createStatement()) { - // executeQuery - ResultSet tempResultSet = statement.executeQuery(sql); +try (Statement statement = connection.createStatement(); + // executeQuery + ResultSet tempResultSet = statement.executeQuery(sql)) { + // print result printResult(tempResultSet); } catch (SQLException e) {