update jdbc stmt2 doc and sample code
This commit is contained in:
parent
e05601ddfa
commit
b1e9c7e6e6
|
@ -109,7 +109,7 @@ If you are using Maven to manage your project, simply add the following dependen
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,15 @@ Next, we continue to use smart meters as an example to demonstrate the efficient
|
||||||
|
|
||||||
<Tabs defaultValue="java" groupId="lang">
|
<Tabs defaultValue="java" groupId="lang">
|
||||||
<TabItem value="java" label="Java">
|
<TabItem value="java" label="Java">
|
||||||
|
|
||||||
|
There are two kinds of interfaces for parameter binding: one is the standard JDBC interface, and the other is an extended interface. The extended interface offers better performance.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
{{#include docs/examples/java/src/main/java/com/taos/example/WSParameterBindingBasicDemo.java:para_bind}}
|
{{#include docs/examples/java/src/main/java/com/taos/example/WSParameterBindingStdInterfaceDemo.java:para_bind}}
|
||||||
|
```
|
||||||
|
|
||||||
|
```java
|
||||||
|
{{#include docs/examples/java/src/main/java/com/taos/example/WSParameterBindingExtendInterfaceDemo.java:para_bind}}
|
||||||
```
|
```
|
||||||
|
|
||||||
This is a [more detailed parameter binding example](https://github.com/taosdata/TDengine/blob/main/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java)
|
This is a [more detailed parameter binding example](https://github.com/taosdata/TDengine/blob/main/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java)
|
||||||
|
|
|
@ -31,7 +31,8 @@ The JDBC driver implementation for TDengine strives to be consistent with relati
|
||||||
## Version History
|
## Version History
|
||||||
|
|
||||||
| taos-jdbcdriver Version | Major Changes | TDengine Version |
|
| taos-jdbcdriver Version | Major Changes | TDengine Version |
|
||||||
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
|
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
|
||||||
|
| 3.5.0 | 1. Optimized the performance of WebSocket connection parameter binding, supporting parameter binding queries using binary data. <br/> 2. Optimized the performance of small queries in WebSocket connection. <br/> 3. Added support for setting time zone on WebSocket connection. | 3.3.5.0 and higher |
|
||||||
| 3.4.0 | 1. Replaced fastjson library with jackson. <br/> 2. WebSocket uses a separate protocol identifier. <br/> 3. Optimized background thread usage to avoid user misuse leading to timeouts. | - |
|
| 3.4.0 | 1. Replaced fastjson library with jackson. <br/> 2. WebSocket uses a separate protocol identifier. <br/> 3. Optimized background thread usage to avoid user misuse leading to timeouts. | - |
|
||||||
| 3.3.4 | Fixed getInt error when data type is float. | - |
|
| 3.3.4 | Fixed getInt error when data type is float. | - |
|
||||||
| 3.3.3 | Fixed memory leak caused by closing WebSocket statement. | - |
|
| 3.3.3 | Fixed memory leak caused by closing WebSocket statement. | - |
|
||||||
|
@ -76,7 +77,7 @@ The error codes that the JDBC connector may report include 4 types:
|
||||||
Please refer to the specific error codes:
|
Please refer to the specific error codes:
|
||||||
|
|
||||||
| Error Code | Description | Suggested Actions |
|
| Error Code | Description | Suggested Actions |
|
||||||
| ---------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
| ---------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| 0x2301 | connection already closed | The connection is already closed, check the connection status, or recreate the connection to execute related commands. |
|
| 0x2301 | connection already closed | The connection is already closed, check the connection status, or recreate the connection to execute related commands. |
|
||||||
| 0x2302 | this operation is NOT supported currently! | The current interface is not supported, consider switching to another connection method. |
|
| 0x2302 | this operation is NOT supported currently! | The current interface is not supported, consider switching to another connection method. |
|
||||||
| 0x2303 | invalid variables | Invalid parameters, please check the interface specifications and adjust the parameter types and sizes. |
|
| 0x2303 | invalid variables | Invalid parameters, please check the interface specifications and adjust the parameter types and sizes. |
|
||||||
|
@ -490,7 +491,7 @@ For example: if the password is specified as taosdata in the URL and as taosdemo
|
||||||
List of interface methods that return `true` for supported features, others not explicitly mentioned return `false`.
|
List of interface methods that return `true` for supported features, others not explicitly mentioned return `false`.
|
||||||
|
|
||||||
| Interface Method | Description |
|
| Interface Method | Description |
|
||||||
|--------------------------------------------------------|-----------------------------------------------------|
|
| ---------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
||||||
| `boolean nullsAreSortedAtStart()` | Determines if `NULL` values are sorted at the start |
|
| `boolean nullsAreSortedAtStart()` | Determines if `NULL` values are sorted at the start |
|
||||||
| `boolean storesLowerCaseIdentifiers()` | Determines if the database stores identifiers in lowercase |
|
| `boolean storesLowerCaseIdentifiers()` | Determines if the database stores identifiers in lowercase |
|
||||||
| `boolean supportsAlterTableWithAddColumn()` | Determines if the database supports adding columns with `ALTER TABLE` |
|
| `boolean supportsAlterTableWithAddColumn()` | Determines if the database supports adding columns with `ALTER TABLE` |
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.locationtech.jts</groupId>
|
<groupId>org.locationtech.jts</groupId>
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- druid -->
|
<!-- druid -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -67,7 +67,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
<!-- <scope>system</scope>-->
|
<!-- <scope>system</scope>-->
|
||||||
<!-- <systemPath>${project.basedir}/src/main/resources/lib/taos-jdbcdriver-2.0.15-dist.jar</systemPath>-->
|
<!-- <systemPath>${project.basedir}/src/main/resources/lib/taos-jdbcdriver-2.0.15-dist.jar</systemPath>-->
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- ANCHOR_END: dep-->
|
<!-- ANCHOR_END: dep-->
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
package com.taos.example;
|
||||||
|
|
||||||
|
import com.taosdata.jdbc.ws.TSWSPreparedStatement;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
// ANCHOR: para_bind
|
||||||
|
public class WSParameterBindingExtendInterfaceDemo {
|
||||||
|
|
||||||
|
// modify host to your own
|
||||||
|
private static final String host = "127.0.0.1";
|
||||||
|
private static final Random random = new Random(System.currentTimeMillis());
|
||||||
|
private static final int numOfSubTable = 10, numOfRow = 10;
|
||||||
|
|
||||||
|
public static void main(String[] args) throws SQLException {
|
||||||
|
|
||||||
|
String jdbcUrl = "jdbc:TAOS-WS://" + host + ":6041";
|
||||||
|
try (Connection conn = DriverManager.getConnection(jdbcUrl, "root", "taosdata")) {
|
||||||
|
init(conn);
|
||||||
|
|
||||||
|
String sql = "INSERT INTO ? USING power.meters TAGS(?,?) VALUES (?,?,?,?)";
|
||||||
|
|
||||||
|
try (TSWSPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSWSPreparedStatement.class)) {
|
||||||
|
|
||||||
|
for (int i = 1; i <= numOfSubTable; i++) {
|
||||||
|
// set table name
|
||||||
|
pstmt.setTableName("d_bind_" + i);
|
||||||
|
|
||||||
|
// set tags
|
||||||
|
pstmt.setTagInt(0, i);
|
||||||
|
pstmt.setTagString(1, "location_" + i);
|
||||||
|
|
||||||
|
// set column ts
|
||||||
|
ArrayList<Long> tsList = new ArrayList<>();
|
||||||
|
long current = System.currentTimeMillis();
|
||||||
|
for (int j = 0; j < numOfRow; j++)
|
||||||
|
tsList.add(current + j);
|
||||||
|
pstmt.setTimestamp(0, tsList);
|
||||||
|
|
||||||
|
// set column current
|
||||||
|
ArrayList<Float> currentList = new ArrayList<>();
|
||||||
|
for (int j = 0; j < numOfRow; j++)
|
||||||
|
currentList.add(random.nextFloat() * 30);
|
||||||
|
pstmt.setFloat(1, currentList);
|
||||||
|
|
||||||
|
// set column voltage
|
||||||
|
ArrayList<Integer> voltageList = new ArrayList<>();
|
||||||
|
for (int j = 0; j < numOfRow; j++)
|
||||||
|
voltageList.add(random.nextInt(300));
|
||||||
|
pstmt.setInt(2, voltageList);
|
||||||
|
|
||||||
|
// set column phase
|
||||||
|
ArrayList<Float> phaseList = new ArrayList<>();
|
||||||
|
for (int j = 0; j < numOfRow; j++)
|
||||||
|
phaseList.add(random.nextFloat());
|
||||||
|
pstmt.setFloat(3, phaseList);
|
||||||
|
// add column
|
||||||
|
pstmt.columnDataAddBatch();
|
||||||
|
}
|
||||||
|
// execute column
|
||||||
|
pstmt.columnDataExecuteBatch();
|
||||||
|
// you can check exeResult here
|
||||||
|
System.out.println("Successfully inserted " + (numOfSubTable * numOfRow) + " rows to power.meters.");
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
// please refer to the JDBC specifications for detailed exceptions info
|
||||||
|
System.out.printf("Failed to insert to table meters using stmt, %sErrMessage: %s%n",
|
||||||
|
ex instanceof SQLException ? "ErrCode: " + ((SQLException) ex).getErrorCode() + ", " : "",
|
||||||
|
ex.getMessage());
|
||||||
|
// Print stack trace for context in examples. Use logging in production.
|
||||||
|
ex.printStackTrace();
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void init(Connection conn) throws SQLException {
|
||||||
|
try (Statement stmt = conn.createStatement()) {
|
||||||
|
stmt.execute("CREATE DATABASE IF NOT EXISTS power");
|
||||||
|
stmt.execute("USE power");
|
||||||
|
stmt.execute(
|
||||||
|
"CREATE STABLE IF NOT EXISTS power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (groupId INT, location BINARY(24))");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ANCHOR_END: para_bind
|
|
@ -1,12 +1,10 @@
|
||||||
package com.taos.example;
|
package com.taos.example;
|
||||||
|
|
||||||
import com.taosdata.jdbc.ws.TSWSPreparedStatement;
|
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
// ANCHOR: para_bind
|
// ANCHOR: para_bind
|
||||||
public class WSParameterBindingBasicDemo {
|
public class WSParameterBindingStdInterfaceDemo {
|
||||||
|
|
||||||
// modify host to your own
|
// modify host to your own
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
|
@ -19,32 +17,30 @@ public class WSParameterBindingBasicDemo {
|
||||||
try (Connection conn = DriverManager.getConnection(jdbcUrl, "root", "taosdata")) {
|
try (Connection conn = DriverManager.getConnection(jdbcUrl, "root", "taosdata")) {
|
||||||
init(conn);
|
init(conn);
|
||||||
|
|
||||||
String sql = "INSERT INTO ? USING power.meters TAGS(?,?) VALUES (?,?,?,?)";
|
// If you are certain that the child table exists, you can avoid binding the tag column to improve performance.
|
||||||
|
String sql = "INSERT INTO power.meters (tbname, groupid, location, ts, current, voltage, phase) VALUES (?,?,?,?,?,?,?)";
|
||||||
|
|
||||||
try (TSWSPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSWSPreparedStatement.class)) {
|
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
||||||
|
long current = System.currentTimeMillis();
|
||||||
|
|
||||||
for (int i = 1; i <= numOfSubTable; i++) {
|
for (int i = 1; i <= numOfSubTable; i++) {
|
||||||
// set table name
|
|
||||||
pstmt.setTableName("d_bind_" + i);
|
|
||||||
|
|
||||||
// set tags
|
|
||||||
pstmt.setTagInt(0, i);
|
|
||||||
pstmt.setTagString(1, "location_" + i);
|
|
||||||
|
|
||||||
// set columns
|
|
||||||
long current = System.currentTimeMillis();
|
|
||||||
for (int j = 0; j < numOfRow; j++) {
|
for (int j = 0; j < numOfRow; j++) {
|
||||||
pstmt.setTimestamp(1, new Timestamp(current + j));
|
pstmt.setString(1, "d_bind_" + i);
|
||||||
pstmt.setFloat(2, random.nextFloat() * 30);
|
|
||||||
pstmt.setInt(3, random.nextInt(300));
|
pstmt.setInt(2, i);
|
||||||
pstmt.setFloat(4, random.nextFloat());
|
pstmt.setString(3, "location_" + i);
|
||||||
|
|
||||||
|
pstmt.setTimestamp(4, new Timestamp(current + j));
|
||||||
|
pstmt.setFloat(5, random.nextFloat() * 30);
|
||||||
|
pstmt.setInt(6, random.nextInt(300));
|
||||||
|
pstmt.setFloat(7, random.nextFloat());
|
||||||
pstmt.addBatch();
|
pstmt.addBatch();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
int[] exeResult = pstmt.executeBatch();
|
int[] exeResult = pstmt.executeBatch();
|
||||||
// you can check exeResult here
|
// you can check exeResult here
|
||||||
System.out.println("Successfully inserted " + exeResult.length + " rows to power.meters.");
|
System.out.println("Successfully inserted " + exeResult.length + " rows to power.meters.");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
// please refer to the JDBC specifications for detailed exceptions info
|
// please refer to the JDBC specifications for detailed exceptions info
|
||||||
System.out.printf("Failed to insert to table meters using stmt, %sErrMessage: %s%n",
|
System.out.printf("Failed to insert to table meters using stmt, %sErrMessage: %s%n",
|
|
@ -118,9 +118,14 @@ public class TestAll {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWsStmtBasic() throws Exception {
|
public void testWsStmtStd() throws Exception {
|
||||||
dropDB("power");
|
dropDB("power");
|
||||||
WSParameterBindingBasicDemo.main(args);
|
WSParameterBindingStdInterfaceDemo.main(args);
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testWsStmtExtend() throws Exception {
|
||||||
|
dropDB("power");
|
||||||
|
WSParameterBindingExtendInterfaceDemo.main(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -89,7 +89,7 @@ TDengine 提供了丰富的应用程序开发接口,为了便于用户快速
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -26,10 +26,16 @@ import TabItem from "@theme/TabItem";
|
||||||
## WebSocket 连接
|
## WebSocket 连接
|
||||||
<Tabs defaultValue="java" groupId="lang">
|
<Tabs defaultValue="java" groupId="lang">
|
||||||
<TabItem value="java" label="Java">
|
<TabItem value="java" label="Java">
|
||||||
|
|
||||||
|
参数绑定有两种接口使用方式,一种是 JDBC 标准接口,一种是扩展接口,扩展接口性能更好一些。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
{{#include docs/examples/java/src/main/java/com/taos/example/WSParameterBindingBasicDemo.java:para_bind}}
|
{{#include docs/examples/java/src/main/java/com/taos/example/WSParameterBindingStdInterfaceDemo.java:para_bind}}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```java
|
||||||
|
{{#include docs/examples/java/src/main/java/com/taos/example/WSParameterBindingExtendInterfaceDemo.java:para_bind}}
|
||||||
|
```
|
||||||
|
|
||||||
这是一个[更详细的参数绑定示例](https://github.com/taosdata/TDengine/blob/main/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java)
|
这是一个[更详细的参数绑定示例](https://github.com/taosdata/TDengine/blob/main/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java)
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ TDengine 的 JDBC 驱动实现尽可能与关系型数据库驱动保持一致
|
||||||
|
|
||||||
| taos-jdbcdriver 版本 | 主要变化 | TDengine 版本 |
|
| taos-jdbcdriver 版本 | 主要变化 | TDengine 版本 |
|
||||||
| ------------------| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
|
| ------------------| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
|
||||||
|
| 3.5.0 | 1. 优化了 WebSocket 连接参数绑定性能,支持参数绑定查询使用二进制数据 <br/> 2. 优化了 WebSocket 连接在小查询上的性能 <br/> 3. WebSocket 连接上支持设置时区 | 3.3.5.0 及更高版本 |
|
||||||
| 3.4.0 | 1. 使用 jackson 库替换 fastjson 库 <br/> 2. WebSocket 采用独立协议标识 <br/> 3. 优化后台拉取线程使用,避免用户误用导致超时 | - |
|
| 3.4.0 | 1. 使用 jackson 库替换 fastjson 库 <br/> 2. WebSocket 采用独立协议标识 <br/> 3. 优化后台拉取线程使用,避免用户误用导致超时 | - |
|
||||||
| 3.3.4 | 解决了 getInt 在数据类型为 float 报错 | - |
|
| 3.3.4 | 解决了 getInt 在数据类型为 float 报错 | - |
|
||||||
| 3.3.3 | 解决了 WebSocket statement 关闭导致的内存泄漏 | - |
|
| 3.3.3 | 解决了 WebSocket statement 关闭导致的内存泄漏 | - |
|
||||||
|
|
Loading…
Reference in New Issue