diff --git a/src/UserGuide/Master/Table/API/Programming-Java-Native-API_apache.md b/src/UserGuide/Master/Table/API/Programming-Java-Native-API_apache.md index ae2296b47..80a2c0f95 100644 --- a/src/UserGuide/Master/Table/API/Programming-Java-Native-API_apache.md +++ b/src/UserGuide/Master/Table/API/Programming-Java-Native-API_apache.md @@ -20,16 +20,18 @@ --> # Java Native API +## 1. Function Introduction + IoTDB provides a Java native client driver and a session pool management mechanism. These tools enable developers to interact with IoTDB using object-oriented APIs, allowing time-series objects to be directly assembled and inserted into the database without constructing SQL statements. It is recommended to use the `ITableSessionPool` for multi-threaded database operations to maximize efficiency. -## 1. Prerequisites +## 2. Usage Instructions -### 1.1 Environment Requirements +**Environment Requirements** - **JDK**: Version 1.8 or higher - **Maven**: Version 3.6 or higher -### 1.2 Adding Maven Dependencies +**Adding Maven Dependencies** ```XML @@ -41,13 +43,15 @@ IoTDB provides a Java native client driver and a session pool management mechani ``` -## 2. Read and Write Operations +## 3. Read and Write Operations + +### 3.1 ITableSession Interface -### 2.1 ITableSession Interface +#### 3.1.1 Feature Description The `ITableSession` interface defines basic operations for interacting with IoTDB, including data insertion, query execution, and session closure. Note that this interface is **not thread-safe**. -#### Method Overview +#### 3.1.2 Method Overview | **Method Name** | **Description** | **Parameters** | **Return Value** | **Exceptions** | | --------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | --------------------------------------------------------- | @@ -57,7 +61,7 @@ The `ITableSession` interface defines basic operations for interacting with IoTD | executeQueryStatement(String sql, long timeoutInMs) | Executes a query SQL statement with a specified timeout in milliseconds. | `sql`: The SQL query statement. `timeoutInMs`: Query timeout in milliseconds. | `SessionDataSet` | `StatementExecutionException` | | close() | Closes the session and releases resources. | None | None | IoTDBConnectionException | -#### Sample Code +#### 3.1.3 Sample Code ```Java /** @@ -125,11 +129,13 @@ public interface ITableSession extends AutoCloseable { } ``` -### 2.2 TableSessionBuilder Class +### 3.2 TableSessionBuilder Class + +#### 3.2.1 Feature Description The `TableSessionBuilder` class is a builder for configuring and creating instances of the `ITableSession` interface. It allows developers to set connection parameters, query parameters, and security features. -#### Parameter Configuration +#### 3.2.2 Parameter Configuration | **Parameter** | **Description** | **Default Value** | |-----------------------------------------------------| ------------------------------------------------------------ | ------------------------------------------------- | @@ -152,7 +158,7 @@ The `TableSessionBuilder` class is a builder for configuring and creating instan | enableCompression(boolean enableCompression) | Enables or disables RPC compression for the connection. | `false` | | connectionTimeoutInMs(int connectionTimeoutInMs) | Sets the connection timeout in milliseconds. | `0` (no timeout) | -#### Sample Code +#### 3.2.3 Sample Code ```Java /** @@ -337,20 +343,22 @@ public class TableSessionBuilder { } ``` -## 3. Session Pool +## 4. Session Pool + +### 4.1 ITableSessionPool Interface -### 3.1 ITableSessionPool Interface +#### 4.1.1 Feature Description The `ITableSessionPool` interface manages a pool of `ITableSession` instances, enabling efficient reuse of connections and proper cleanup of resources. -#### Method Overview +#### 4.1.2 Method Overview | **Method Name** | **Description** | **Return Value** | **Exceptions** | | --------------- | ---------------------------------------------------------- | ---------------- | -------------------------- | | getSession() | Acquires a session from the pool for database interaction. | `ITableSession` | `IoTDBConnectionException` | | close() | Closes the session pool and releases resources.。 | None | None | -#### Sample Code +#### 4.1.3 Sample Code ```Java /** @@ -379,11 +387,13 @@ public interface ITableSessionPool { } ``` -### 3.2 TableSessionPoolBuilder Class +### 4.2 TableSessionPoolBuilder Class + +#### 4.2.1 Feature Description The `TableSessionPoolBuilder` class is a builder for configuring and creating `ITableSessionPool` instances, supporting options like connection settings and pooling behavior. -#### Parameter Configuration +#### 4.2.2 Parameter Configuration | **Parameter** | **Description** | **Default Value** | |---------------------------------------------------------------| ------------------------------------------------------------ | --------------------------------------------- | @@ -408,7 +418,7 @@ The `TableSessionPoolBuilder` class is a builder for configuring and creating `I | trustStore(String keyStore) | Sets the path to the trust store for SSL connections. | `null` | | trustStorePwd(String keyStorePwd) | Sets the password for the SSL trust store. | `null` | -#### Sample Code +#### 4.2.3 Sample Code ```Java /** @@ -608,4 +618,236 @@ public class TableSessionPoolBuilder { */ public TableSessionPoolBuilder trustStorePwd(String keyStorePwd); } +``` + +## 5. Example Code + +Session: [src/main/java/org/apache/iotdb/TableModelSessionExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionExample.java) + +SessionPool: [src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java) + +```Java +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb; + +import org.apache.iotdb.isession.ITableSession; +import org.apache.iotdb.isession.SessionDataSet; +import org.apache.iotdb.isession.pool.ITableSessionPool; +import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.session.pool.TableSessionPoolBuilder; + +import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.write.record.Tablet; +import org.apache.tsfile.write.record.Tablet.ColumnCategory; +import org.apache.tsfile.write.schema.IMeasurementSchema; +import org.apache.tsfile.write.schema.MeasurementSchema; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class TableModelSessionPoolExample { + + private static final String LOCAL_URL = "127.0.0.1:6667"; + + public static void main(String[] args) { + + // don't specify database in constructor + ITableSessionPool tableSessionPool = + new TableSessionPoolBuilder() + .nodeUrls(Collections.singletonList(LOCAL_URL)) + .user("root") + .password("root") + .maxSize(1) + .build(); + + try (ITableSession session = tableSessionPool.getSession()) { + + session.executeNonQueryStatement("CREATE DATABASE test1"); + session.executeNonQueryStatement("CREATE DATABASE test2"); + + session.executeNonQueryStatement("use test2"); + + // or use full qualified table name + session.executeNonQueryStatement( + "create table test1.table1(" + + "region_id STRING TAG, " + + "plant_id STRING TAG, " + + "device_id STRING TAG, " + + "model STRING ATTRIBUTE, " + + "temperature FLOAT FIELD, " + + "humidity DOUBLE FIELD) with (TTL=3600000)"); + + session.executeNonQueryStatement( + "create table table2(" + + "region_id STRING TAG, " + + "plant_id STRING TAG, " + + "color STRING ATTRIBUTE, " + + "temperature FLOAT FIELD, " + + "speed DOUBLE FIELD) with (TTL=6600000)"); + + // show tables from current database + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // show tables by specifying another database + // using SHOW tables FROM + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES FROM test1")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // insert table data by tablet + List measurementSchemaList = + new ArrayList<>( + Arrays.asList( + new MeasurementSchema("region_id", TSDataType.STRING), + new MeasurementSchema("plant_id", TSDataType.STRING), + new MeasurementSchema("device_id", TSDataType.STRING), + new MeasurementSchema("model", TSDataType.STRING), + new MeasurementSchema("temperature", TSDataType.FLOAT), + new MeasurementSchema("humidity", TSDataType.DOUBLE))); + List columnTypeList = + new ArrayList<>( + Arrays.asList( + ColumnCategory.TAG, + ColumnCategory.TAG, + ColumnCategory.TAG, + ColumnCategory.ATTRIBUTE, + ColumnCategory.FIELD, + ColumnCategory.FIELD)); + Tablet tablet = + new Tablet( + "test1", + IMeasurementSchema.getMeasurementNameList(measurementSchemaList), + IMeasurementSchema.getDataTypeList(measurementSchemaList), + columnTypeList, + 100); + for (long timestamp = 0; timestamp < 100; timestamp++) { + int rowIndex = tablet.getRowSize(); + tablet.addTimestamp(rowIndex, timestamp); + tablet.addValue("region_id", rowIndex, "1"); + tablet.addValue("plant_id", rowIndex, "5"); + tablet.addValue("device_id", rowIndex, "3"); + tablet.addValue("model", rowIndex, "A"); + tablet.addValue("temperature", rowIndex, 37.6F); + tablet.addValue("humidity", rowIndex, 111.1); + if (tablet.getRowSize() == tablet.getMaxRowNumber()) { + session.insert(tablet); + tablet.reset(); + } + } + if (tablet.getRowSize() != 0) { + session.insert(tablet); + tablet.reset(); + } + + // query table data + try (SessionDataSet dataSet = + session.executeQueryStatement( + "select * from test1 " + + "where region_id = '1' and plant_id in ('3', '5') and device_id = '3'")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } finally { + tableSessionPool.close(); + } + + // specify database in constructor + tableSessionPool = + new TableSessionPoolBuilder() + .nodeUrls(Collections.singletonList(LOCAL_URL)) + .user("root") + .password("root") + .maxSize(1) + .database("test1") + .build(); + + try (ITableSession session = tableSessionPool.getSession()) { + + // show tables from current database + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // change database to test2 + session.executeNonQueryStatement("use test2"); + + // show tables by specifying another database + // using SHOW tables FROM + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + + try (ITableSession session = tableSessionPool.getSession()) { + + // show tables from default database test1 + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } finally { + tableSessionPool.close(); + } + } +} ``` \ No newline at end of file diff --git a/src/UserGuide/Master/Table/API/Programming-Java-Native-API_timecho.md b/src/UserGuide/Master/Table/API/Programming-Java-Native-API_timecho.md index 6fbd64539..fba9f72ce 100644 --- a/src/UserGuide/Master/Table/API/Programming-Java-Native-API_timecho.md +++ b/src/UserGuide/Master/Table/API/Programming-Java-Native-API_timecho.md @@ -20,16 +20,18 @@ --> # Java Native API +## 1. Function Introduction + IoTDB provides a Java native client driver and a session pool management mechanism. These tools enable developers to interact with IoTDB using object-oriented APIs, allowing time-series objects to be directly assembled and inserted into the database without constructing SQL statements. It is recommended to use the `ITableSessionPool` for multi-threaded database operations to maximize efficiency. -## 1. Prerequisites +## 2. Usage Instructions -### 1.1 Environment Requirements +**Environment Requirements** - **JDK**: Version 1.8 or higher - **Maven**: Version 3.6 or higher -### 1.2 Adding Maven Dependencies +**Adding Maven Dependencies** ```XML @@ -41,13 +43,15 @@ IoTDB provides a Java native client driver and a session pool management mechani ``` -## 2. Read and Write Operations +## 3. Read and Write Operations + +### 3.1 ITableSession Interface -### 2.1 ITableSession Interface +#### 3.1.1 Feature Description The `ITableSession` interface defines basic operations for interacting with IoTDB, including data insertion, query execution, and session closure. Note that this interface is **not thread-safe**. -#### Method Overview +#### 3.1.2 Method Overview | **Method Name** | **Description** | **Parameters** | **Return Value** | **Exceptions** | | --------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | --------------------------------------------------------- | @@ -57,9 +61,9 @@ The `ITableSession` interface defines basic operations for interacting with IoTD | executeQueryStatement(String sql, long timeoutInMs) | Executes a query SQL statement with a specified timeout in milliseconds. | `sql`: The SQL query statement. `timeoutInMs`: Query timeout in milliseconds. | `SessionDataSet` | `StatementExecutionException` | | close() | Closes the session and releases resources. | None | None | IoTDBConnectionException | -#### Sample Code +#### 3.1.3 Sample Code -```Java +```java /** * This interface defines a session for interacting with IoTDB tables. * It supports operations such as data insertion, executing queries, and closing the session. @@ -125,11 +129,13 @@ public interface ITableSession extends AutoCloseable { } ``` -### 2.2 TableSessionBuilder Class +### 3.2 TableSessionBuilder Class + +#### 3.2.1 Feature Description The `TableSessionBuilder` class is a builder for configuring and creating instances of the `ITableSession` interface. It allows developers to set connection parameters, query parameters, and security features. -#### Parameter Configuration +#### 3.2.2 Parameter Configuration | **Parameter** | **Description** | **Default Value** | |-----------------------------------------------------| ------------------------------------------------------------ | ------------------------------------------------- | @@ -152,9 +158,9 @@ The `TableSessionBuilder` class is a builder for configuring and creating instan | enableCompression(boolean enableCompression) | Enables or disables RPC compression for the connection. | `false` | | connectionTimeoutInMs(int connectionTimeoutInMs) | Sets the connection timeout in milliseconds. | `0` (no timeout) | -#### Sample Code +#### 3.2.3 Sample Code -```Java +```java /** * A builder class for constructing instances of {@link ITableSession}. * @@ -337,20 +343,22 @@ public class TableSessionBuilder { } ``` -## 3. Session Pool +## 4. Session Pool -### 3.1 ITableSessionPool Interface +### 4.1 ITableSessionPool Interface + +#### 4.1.1 Feature Description The `ITableSessionPool` interface manages a pool of `ITableSession` instances, enabling efficient reuse of connections and proper cleanup of resources. -#### Method Overview +#### 4.1.2 Method Overview | **Method Name** | **Description** | **Return Value** | **Exceptions** | | --------------- | ---------------------------------------------------------- | ---------------- | -------------------------- | | getSession() | Acquires a session from the pool for database interaction. | `ITableSession` | `IoTDBConnectionException` | | close() | Closes the session pool and releases resources.。 | None | None | -#### Sample Code +#### 4.1.3 Sample Code ```Java /** @@ -379,11 +387,13 @@ public interface ITableSessionPool { } ``` -### 3.2 ableSessionPoolBuilder Class +### 4.2 ableSessionPoolBuilder Class + +#### 4.2.1 Feature Description The `TableSessionPoolBuilder` class is a builder for configuring and creating `ITableSessionPool` instances, supporting options like connection settings and pooling behavior. -#### Parameter Configuration +#### 4.2.2 Parameter Configuration | **Parameter** | **Description** | **Default Value** | |---------------------------------------------------------------| ------------------------------------------------------------ | --------------------------------------------- | @@ -408,7 +418,7 @@ The `TableSessionPoolBuilder` class is a builder for configuring and creating `I | trustStore(String keyStore) | Sets the path to the trust store for SSL connections. | `null` | | trustStorePwd(String keyStorePwd) | Sets the password for the SSL trust store. | `null` | -#### Sample Code +#### 4.2.3 Sample Code ```Java /** @@ -608,4 +618,236 @@ public class TableSessionPoolBuilder { */ public TableSessionPoolBuilder trustStorePwd(String keyStorePwd); } +``` + +## 5. Example Code + +Session: [src/main/java/org/apache/iotdb/TableModelSessionExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionExample.java) + +SessionPool: [src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java) + +```Java +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb; + +import org.apache.iotdb.isession.ITableSession; +import org.apache.iotdb.isession.SessionDataSet; +import org.apache.iotdb.isession.pool.ITableSessionPool; +import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.session.pool.TableSessionPoolBuilder; + +import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.write.record.Tablet; +import org.apache.tsfile.write.record.Tablet.ColumnCategory; +import org.apache.tsfile.write.schema.IMeasurementSchema; +import org.apache.tsfile.write.schema.MeasurementSchema; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class TableModelSessionPoolExample { + + private static final String LOCAL_URL = "127.0.0.1:6667"; + + public static void main(String[] args) { + + // don't specify database in constructor + ITableSessionPool tableSessionPool = + new TableSessionPoolBuilder() + .nodeUrls(Collections.singletonList(LOCAL_URL)) + .user("root") + .password("root") + .maxSize(1) + .build(); + + try (ITableSession session = tableSessionPool.getSession()) { + + session.executeNonQueryStatement("CREATE DATABASE test1"); + session.executeNonQueryStatement("CREATE DATABASE test2"); + + session.executeNonQueryStatement("use test2"); + + // or use full qualified table name + session.executeNonQueryStatement( + "create table test1.table1(" + + "region_id STRING TAG, " + + "plant_id STRING TAG, " + + "device_id STRING TAG, " + + "model STRING ATTRIBUTE, " + + "temperature FLOAT FIELD, " + + "humidity DOUBLE FIELD) with (TTL=3600000)"); + + session.executeNonQueryStatement( + "create table table2(" + + "region_id STRING TAG, " + + "plant_id STRING TAG, " + + "color STRING ATTRIBUTE, " + + "temperature FLOAT FIELD, " + + "speed DOUBLE FIELD) with (TTL=6600000)"); + + // show tables from current database + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // show tables by specifying another database + // using SHOW tables FROM + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES FROM test1")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // insert table data by tablet + List measurementSchemaList = + new ArrayList<>( + Arrays.asList( + new MeasurementSchema("region_id", TSDataType.STRING), + new MeasurementSchema("plant_id", TSDataType.STRING), + new MeasurementSchema("device_id", TSDataType.STRING), + new MeasurementSchema("model", TSDataType.STRING), + new MeasurementSchema("temperature", TSDataType.FLOAT), + new MeasurementSchema("humidity", TSDataType.DOUBLE))); + List columnTypeList = + new ArrayList<>( + Arrays.asList( + ColumnCategory.TAG, + ColumnCategory.TAG, + ColumnCategory.TAG, + ColumnCategory.ATTRIBUTE, + ColumnCategory.FIELD, + ColumnCategory.FIELD)); + Tablet tablet = + new Tablet( + "test1", + IMeasurementSchema.getMeasurementNameList(measurementSchemaList), + IMeasurementSchema.getDataTypeList(measurementSchemaList), + columnTypeList, + 100); + for (long timestamp = 0; timestamp < 100; timestamp++) { + int rowIndex = tablet.getRowSize(); + tablet.addTimestamp(rowIndex, timestamp); + tablet.addValue("region_id", rowIndex, "1"); + tablet.addValue("plant_id", rowIndex, "5"); + tablet.addValue("device_id", rowIndex, "3"); + tablet.addValue("model", rowIndex, "A"); + tablet.addValue("temperature", rowIndex, 37.6F); + tablet.addValue("humidity", rowIndex, 111.1); + if (tablet.getRowSize() == tablet.getMaxRowNumber()) { + session.insert(tablet); + tablet.reset(); + } + } + if (tablet.getRowSize() != 0) { + session.insert(tablet); + tablet.reset(); + } + + // query table data + try (SessionDataSet dataSet = + session.executeQueryStatement( + "select * from test1 " + + "where region_id = '1' and plant_id in ('3', '5') and device_id = '3'")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } finally { + tableSessionPool.close(); + } + + // specify database in constructor + tableSessionPool = + new TableSessionPoolBuilder() + .nodeUrls(Collections.singletonList(LOCAL_URL)) + .user("root") + .password("root") + .maxSize(1) + .database("test1") + .build(); + + try (ITableSession session = tableSessionPool.getSession()) { + + // show tables from current database + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // change database to test2 + session.executeNonQueryStatement("use test2"); + + // show tables by specifying another database + // using SHOW tables FROM + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + + try (ITableSession session = tableSessionPool.getSession()) { + + // show tables from default database test1 + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } finally { + tableSessionPool.close(); + } + } +} ``` \ No newline at end of file diff --git a/src/UserGuide/latest-Table/API/Programming-Java-Native-API_apache.md b/src/UserGuide/latest-Table/API/Programming-Java-Native-API_apache.md index ae2296b47..80a2c0f95 100644 --- a/src/UserGuide/latest-Table/API/Programming-Java-Native-API_apache.md +++ b/src/UserGuide/latest-Table/API/Programming-Java-Native-API_apache.md @@ -20,16 +20,18 @@ --> # Java Native API +## 1. Function Introduction + IoTDB provides a Java native client driver and a session pool management mechanism. These tools enable developers to interact with IoTDB using object-oriented APIs, allowing time-series objects to be directly assembled and inserted into the database without constructing SQL statements. It is recommended to use the `ITableSessionPool` for multi-threaded database operations to maximize efficiency. -## 1. Prerequisites +## 2. Usage Instructions -### 1.1 Environment Requirements +**Environment Requirements** - **JDK**: Version 1.8 or higher - **Maven**: Version 3.6 or higher -### 1.2 Adding Maven Dependencies +**Adding Maven Dependencies** ```XML @@ -41,13 +43,15 @@ IoTDB provides a Java native client driver and a session pool management mechani ``` -## 2. Read and Write Operations +## 3. Read and Write Operations + +### 3.1 ITableSession Interface -### 2.1 ITableSession Interface +#### 3.1.1 Feature Description The `ITableSession` interface defines basic operations for interacting with IoTDB, including data insertion, query execution, and session closure. Note that this interface is **not thread-safe**. -#### Method Overview +#### 3.1.2 Method Overview | **Method Name** | **Description** | **Parameters** | **Return Value** | **Exceptions** | | --------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | --------------------------------------------------------- | @@ -57,7 +61,7 @@ The `ITableSession` interface defines basic operations for interacting with IoTD | executeQueryStatement(String sql, long timeoutInMs) | Executes a query SQL statement with a specified timeout in milliseconds. | `sql`: The SQL query statement. `timeoutInMs`: Query timeout in milliseconds. | `SessionDataSet` | `StatementExecutionException` | | close() | Closes the session and releases resources. | None | None | IoTDBConnectionException | -#### Sample Code +#### 3.1.3 Sample Code ```Java /** @@ -125,11 +129,13 @@ public interface ITableSession extends AutoCloseable { } ``` -### 2.2 TableSessionBuilder Class +### 3.2 TableSessionBuilder Class + +#### 3.2.1 Feature Description The `TableSessionBuilder` class is a builder for configuring and creating instances of the `ITableSession` interface. It allows developers to set connection parameters, query parameters, and security features. -#### Parameter Configuration +#### 3.2.2 Parameter Configuration | **Parameter** | **Description** | **Default Value** | |-----------------------------------------------------| ------------------------------------------------------------ | ------------------------------------------------- | @@ -152,7 +158,7 @@ The `TableSessionBuilder` class is a builder for configuring and creating instan | enableCompression(boolean enableCompression) | Enables or disables RPC compression for the connection. | `false` | | connectionTimeoutInMs(int connectionTimeoutInMs) | Sets the connection timeout in milliseconds. | `0` (no timeout) | -#### Sample Code +#### 3.2.3 Sample Code ```Java /** @@ -337,20 +343,22 @@ public class TableSessionBuilder { } ``` -## 3. Session Pool +## 4. Session Pool + +### 4.1 ITableSessionPool Interface -### 3.1 ITableSessionPool Interface +#### 4.1.1 Feature Description The `ITableSessionPool` interface manages a pool of `ITableSession` instances, enabling efficient reuse of connections and proper cleanup of resources. -#### Method Overview +#### 4.1.2 Method Overview | **Method Name** | **Description** | **Return Value** | **Exceptions** | | --------------- | ---------------------------------------------------------- | ---------------- | -------------------------- | | getSession() | Acquires a session from the pool for database interaction. | `ITableSession` | `IoTDBConnectionException` | | close() | Closes the session pool and releases resources.。 | None | None | -#### Sample Code +#### 4.1.3 Sample Code ```Java /** @@ -379,11 +387,13 @@ public interface ITableSessionPool { } ``` -### 3.2 TableSessionPoolBuilder Class +### 4.2 TableSessionPoolBuilder Class + +#### 4.2.1 Feature Description The `TableSessionPoolBuilder` class is a builder for configuring and creating `ITableSessionPool` instances, supporting options like connection settings and pooling behavior. -#### Parameter Configuration +#### 4.2.2 Parameter Configuration | **Parameter** | **Description** | **Default Value** | |---------------------------------------------------------------| ------------------------------------------------------------ | --------------------------------------------- | @@ -408,7 +418,7 @@ The `TableSessionPoolBuilder` class is a builder for configuring and creating `I | trustStore(String keyStore) | Sets the path to the trust store for SSL connections. | `null` | | trustStorePwd(String keyStorePwd) | Sets the password for the SSL trust store. | `null` | -#### Sample Code +#### 4.2.3 Sample Code ```Java /** @@ -608,4 +618,236 @@ public class TableSessionPoolBuilder { */ public TableSessionPoolBuilder trustStorePwd(String keyStorePwd); } +``` + +## 5. Example Code + +Session: [src/main/java/org/apache/iotdb/TableModelSessionExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionExample.java) + +SessionPool: [src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java) + +```Java +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb; + +import org.apache.iotdb.isession.ITableSession; +import org.apache.iotdb.isession.SessionDataSet; +import org.apache.iotdb.isession.pool.ITableSessionPool; +import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.session.pool.TableSessionPoolBuilder; + +import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.write.record.Tablet; +import org.apache.tsfile.write.record.Tablet.ColumnCategory; +import org.apache.tsfile.write.schema.IMeasurementSchema; +import org.apache.tsfile.write.schema.MeasurementSchema; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class TableModelSessionPoolExample { + + private static final String LOCAL_URL = "127.0.0.1:6667"; + + public static void main(String[] args) { + + // don't specify database in constructor + ITableSessionPool tableSessionPool = + new TableSessionPoolBuilder() + .nodeUrls(Collections.singletonList(LOCAL_URL)) + .user("root") + .password("root") + .maxSize(1) + .build(); + + try (ITableSession session = tableSessionPool.getSession()) { + + session.executeNonQueryStatement("CREATE DATABASE test1"); + session.executeNonQueryStatement("CREATE DATABASE test2"); + + session.executeNonQueryStatement("use test2"); + + // or use full qualified table name + session.executeNonQueryStatement( + "create table test1.table1(" + + "region_id STRING TAG, " + + "plant_id STRING TAG, " + + "device_id STRING TAG, " + + "model STRING ATTRIBUTE, " + + "temperature FLOAT FIELD, " + + "humidity DOUBLE FIELD) with (TTL=3600000)"); + + session.executeNonQueryStatement( + "create table table2(" + + "region_id STRING TAG, " + + "plant_id STRING TAG, " + + "color STRING ATTRIBUTE, " + + "temperature FLOAT FIELD, " + + "speed DOUBLE FIELD) with (TTL=6600000)"); + + // show tables from current database + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // show tables by specifying another database + // using SHOW tables FROM + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES FROM test1")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // insert table data by tablet + List measurementSchemaList = + new ArrayList<>( + Arrays.asList( + new MeasurementSchema("region_id", TSDataType.STRING), + new MeasurementSchema("plant_id", TSDataType.STRING), + new MeasurementSchema("device_id", TSDataType.STRING), + new MeasurementSchema("model", TSDataType.STRING), + new MeasurementSchema("temperature", TSDataType.FLOAT), + new MeasurementSchema("humidity", TSDataType.DOUBLE))); + List columnTypeList = + new ArrayList<>( + Arrays.asList( + ColumnCategory.TAG, + ColumnCategory.TAG, + ColumnCategory.TAG, + ColumnCategory.ATTRIBUTE, + ColumnCategory.FIELD, + ColumnCategory.FIELD)); + Tablet tablet = + new Tablet( + "test1", + IMeasurementSchema.getMeasurementNameList(measurementSchemaList), + IMeasurementSchema.getDataTypeList(measurementSchemaList), + columnTypeList, + 100); + for (long timestamp = 0; timestamp < 100; timestamp++) { + int rowIndex = tablet.getRowSize(); + tablet.addTimestamp(rowIndex, timestamp); + tablet.addValue("region_id", rowIndex, "1"); + tablet.addValue("plant_id", rowIndex, "5"); + tablet.addValue("device_id", rowIndex, "3"); + tablet.addValue("model", rowIndex, "A"); + tablet.addValue("temperature", rowIndex, 37.6F); + tablet.addValue("humidity", rowIndex, 111.1); + if (tablet.getRowSize() == tablet.getMaxRowNumber()) { + session.insert(tablet); + tablet.reset(); + } + } + if (tablet.getRowSize() != 0) { + session.insert(tablet); + tablet.reset(); + } + + // query table data + try (SessionDataSet dataSet = + session.executeQueryStatement( + "select * from test1 " + + "where region_id = '1' and plant_id in ('3', '5') and device_id = '3'")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } finally { + tableSessionPool.close(); + } + + // specify database in constructor + tableSessionPool = + new TableSessionPoolBuilder() + .nodeUrls(Collections.singletonList(LOCAL_URL)) + .user("root") + .password("root") + .maxSize(1) + .database("test1") + .build(); + + try (ITableSession session = tableSessionPool.getSession()) { + + // show tables from current database + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // change database to test2 + session.executeNonQueryStatement("use test2"); + + // show tables by specifying another database + // using SHOW tables FROM + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + + try (ITableSession session = tableSessionPool.getSession()) { + + // show tables from default database test1 + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } finally { + tableSessionPool.close(); + } + } +} ``` \ No newline at end of file diff --git a/src/UserGuide/latest-Table/API/Programming-Java-Native-API_timecho.md b/src/UserGuide/latest-Table/API/Programming-Java-Native-API_timecho.md index 6fbd64539..fba9f72ce 100644 --- a/src/UserGuide/latest-Table/API/Programming-Java-Native-API_timecho.md +++ b/src/UserGuide/latest-Table/API/Programming-Java-Native-API_timecho.md @@ -20,16 +20,18 @@ --> # Java Native API +## 1. Function Introduction + IoTDB provides a Java native client driver and a session pool management mechanism. These tools enable developers to interact with IoTDB using object-oriented APIs, allowing time-series objects to be directly assembled and inserted into the database without constructing SQL statements. It is recommended to use the `ITableSessionPool` for multi-threaded database operations to maximize efficiency. -## 1. Prerequisites +## 2. Usage Instructions -### 1.1 Environment Requirements +**Environment Requirements** - **JDK**: Version 1.8 or higher - **Maven**: Version 3.6 or higher -### 1.2 Adding Maven Dependencies +**Adding Maven Dependencies** ```XML @@ -41,13 +43,15 @@ IoTDB provides a Java native client driver and a session pool management mechani ``` -## 2. Read and Write Operations +## 3. Read and Write Operations + +### 3.1 ITableSession Interface -### 2.1 ITableSession Interface +#### 3.1.1 Feature Description The `ITableSession` interface defines basic operations for interacting with IoTDB, including data insertion, query execution, and session closure. Note that this interface is **not thread-safe**. -#### Method Overview +#### 3.1.2 Method Overview | **Method Name** | **Description** | **Parameters** | **Return Value** | **Exceptions** | | --------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | --------------------------------------------------------- | @@ -57,9 +61,9 @@ The `ITableSession` interface defines basic operations for interacting with IoTD | executeQueryStatement(String sql, long timeoutInMs) | Executes a query SQL statement with a specified timeout in milliseconds. | `sql`: The SQL query statement. `timeoutInMs`: Query timeout in milliseconds. | `SessionDataSet` | `StatementExecutionException` | | close() | Closes the session and releases resources. | None | None | IoTDBConnectionException | -#### Sample Code +#### 3.1.3 Sample Code -```Java +```java /** * This interface defines a session for interacting with IoTDB tables. * It supports operations such as data insertion, executing queries, and closing the session. @@ -125,11 +129,13 @@ public interface ITableSession extends AutoCloseable { } ``` -### 2.2 TableSessionBuilder Class +### 3.2 TableSessionBuilder Class + +#### 3.2.1 Feature Description The `TableSessionBuilder` class is a builder for configuring and creating instances of the `ITableSession` interface. It allows developers to set connection parameters, query parameters, and security features. -#### Parameter Configuration +#### 3.2.2 Parameter Configuration | **Parameter** | **Description** | **Default Value** | |-----------------------------------------------------| ------------------------------------------------------------ | ------------------------------------------------- | @@ -152,9 +158,9 @@ The `TableSessionBuilder` class is a builder for configuring and creating instan | enableCompression(boolean enableCompression) | Enables or disables RPC compression for the connection. | `false` | | connectionTimeoutInMs(int connectionTimeoutInMs) | Sets the connection timeout in milliseconds. | `0` (no timeout) | -#### Sample Code +#### 3.2.3 Sample Code -```Java +```java /** * A builder class for constructing instances of {@link ITableSession}. * @@ -337,20 +343,22 @@ public class TableSessionBuilder { } ``` -## 3. Session Pool +## 4. Session Pool -### 3.1 ITableSessionPool Interface +### 4.1 ITableSessionPool Interface + +#### 4.1.1 Feature Description The `ITableSessionPool` interface manages a pool of `ITableSession` instances, enabling efficient reuse of connections and proper cleanup of resources. -#### Method Overview +#### 4.1.2 Method Overview | **Method Name** | **Description** | **Return Value** | **Exceptions** | | --------------- | ---------------------------------------------------------- | ---------------- | -------------------------- | | getSession() | Acquires a session from the pool for database interaction. | `ITableSession` | `IoTDBConnectionException` | | close() | Closes the session pool and releases resources.。 | None | None | -#### Sample Code +#### 4.1.3 Sample Code ```Java /** @@ -379,11 +387,13 @@ public interface ITableSessionPool { } ``` -### 3.2 ableSessionPoolBuilder Class +### 4.2 ableSessionPoolBuilder Class + +#### 4.2.1 Feature Description The `TableSessionPoolBuilder` class is a builder for configuring and creating `ITableSessionPool` instances, supporting options like connection settings and pooling behavior. -#### Parameter Configuration +#### 4.2.2 Parameter Configuration | **Parameter** | **Description** | **Default Value** | |---------------------------------------------------------------| ------------------------------------------------------------ | --------------------------------------------- | @@ -408,7 +418,7 @@ The `TableSessionPoolBuilder` class is a builder for configuring and creating `I | trustStore(String keyStore) | Sets the path to the trust store for SSL connections. | `null` | | trustStorePwd(String keyStorePwd) | Sets the password for the SSL trust store. | `null` | -#### Sample Code +#### 4.2.3 Sample Code ```Java /** @@ -608,4 +618,236 @@ public class TableSessionPoolBuilder { */ public TableSessionPoolBuilder trustStorePwd(String keyStorePwd); } +``` + +## 5. Example Code + +Session: [src/main/java/org/apache/iotdb/TableModelSessionExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionExample.java) + +SessionPool: [src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java) + +```Java +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb; + +import org.apache.iotdb.isession.ITableSession; +import org.apache.iotdb.isession.SessionDataSet; +import org.apache.iotdb.isession.pool.ITableSessionPool; +import org.apache.iotdb.rpc.IoTDBConnectionException; +import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.session.pool.TableSessionPoolBuilder; + +import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.write.record.Tablet; +import org.apache.tsfile.write.record.Tablet.ColumnCategory; +import org.apache.tsfile.write.schema.IMeasurementSchema; +import org.apache.tsfile.write.schema.MeasurementSchema; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class TableModelSessionPoolExample { + + private static final String LOCAL_URL = "127.0.0.1:6667"; + + public static void main(String[] args) { + + // don't specify database in constructor + ITableSessionPool tableSessionPool = + new TableSessionPoolBuilder() + .nodeUrls(Collections.singletonList(LOCAL_URL)) + .user("root") + .password("root") + .maxSize(1) + .build(); + + try (ITableSession session = tableSessionPool.getSession()) { + + session.executeNonQueryStatement("CREATE DATABASE test1"); + session.executeNonQueryStatement("CREATE DATABASE test2"); + + session.executeNonQueryStatement("use test2"); + + // or use full qualified table name + session.executeNonQueryStatement( + "create table test1.table1(" + + "region_id STRING TAG, " + + "plant_id STRING TAG, " + + "device_id STRING TAG, " + + "model STRING ATTRIBUTE, " + + "temperature FLOAT FIELD, " + + "humidity DOUBLE FIELD) with (TTL=3600000)"); + + session.executeNonQueryStatement( + "create table table2(" + + "region_id STRING TAG, " + + "plant_id STRING TAG, " + + "color STRING ATTRIBUTE, " + + "temperature FLOAT FIELD, " + + "speed DOUBLE FIELD) with (TTL=6600000)"); + + // show tables from current database + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // show tables by specifying another database + // using SHOW tables FROM + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES FROM test1")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // insert table data by tablet + List measurementSchemaList = + new ArrayList<>( + Arrays.asList( + new MeasurementSchema("region_id", TSDataType.STRING), + new MeasurementSchema("plant_id", TSDataType.STRING), + new MeasurementSchema("device_id", TSDataType.STRING), + new MeasurementSchema("model", TSDataType.STRING), + new MeasurementSchema("temperature", TSDataType.FLOAT), + new MeasurementSchema("humidity", TSDataType.DOUBLE))); + List columnTypeList = + new ArrayList<>( + Arrays.asList( + ColumnCategory.TAG, + ColumnCategory.TAG, + ColumnCategory.TAG, + ColumnCategory.ATTRIBUTE, + ColumnCategory.FIELD, + ColumnCategory.FIELD)); + Tablet tablet = + new Tablet( + "test1", + IMeasurementSchema.getMeasurementNameList(measurementSchemaList), + IMeasurementSchema.getDataTypeList(measurementSchemaList), + columnTypeList, + 100); + for (long timestamp = 0; timestamp < 100; timestamp++) { + int rowIndex = tablet.getRowSize(); + tablet.addTimestamp(rowIndex, timestamp); + tablet.addValue("region_id", rowIndex, "1"); + tablet.addValue("plant_id", rowIndex, "5"); + tablet.addValue("device_id", rowIndex, "3"); + tablet.addValue("model", rowIndex, "A"); + tablet.addValue("temperature", rowIndex, 37.6F); + tablet.addValue("humidity", rowIndex, 111.1); + if (tablet.getRowSize() == tablet.getMaxRowNumber()) { + session.insert(tablet); + tablet.reset(); + } + } + if (tablet.getRowSize() != 0) { + session.insert(tablet); + tablet.reset(); + } + + // query table data + try (SessionDataSet dataSet = + session.executeQueryStatement( + "select * from test1 " + + "where region_id = '1' and plant_id in ('3', '5') and device_id = '3'")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } finally { + tableSessionPool.close(); + } + + // specify database in constructor + tableSessionPool = + new TableSessionPoolBuilder() + .nodeUrls(Collections.singletonList(LOCAL_URL)) + .user("root") + .password("root") + .maxSize(1) + .database("test1") + .build(); + + try (ITableSession session = tableSessionPool.getSession()) { + + // show tables from current database + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + // change database to test2 + session.executeNonQueryStatement("use test2"); + + // show tables by specifying another database + // using SHOW tables FROM + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + + try (ITableSession session = tableSessionPool.getSession()) { + + // show tables from default database test1 + try (SessionDataSet dataSet = session.executeQueryStatement("SHOW TABLES")) { + System.out.println(dataSet.getColumnNames()); + System.out.println(dataSet.getColumnTypes()); + while (dataSet.hasNext()) { + System.out.println(dataSet.next()); + } + } + + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } finally { + tableSessionPool.close(); + } + } +} ``` \ No newline at end of file diff --git a/src/zh/UserGuide/Master/Table/API/Programming-Java-Native-API_apache.md b/src/zh/UserGuide/Master/Table/API/Programming-Java-Native-API_apache.md index 378a22eee..ca2005c9f 100644 --- a/src/zh/UserGuide/Master/Table/API/Programming-Java-Native-API_apache.md +++ b/src/zh/UserGuide/Master/Table/API/Programming-Java-Native-API_apache.md @@ -425,7 +425,7 @@ TableSessionPool 的构造器,用于配置和创建 ITableSessionPool 的实 | trustStore(String keyStore) | 设置SSL连接的信任库路径 | null | | trustStorePwd(String keyStorePwd) | 设置SSL连接的信任库密码 | null | -#### 4.1.3 接口展示 +#### 4.2.3 接口展示 ```Java /** @@ -629,9 +629,9 @@ public class TableSessionPoolBuilder { ## 5. 示例代码 -Session 示例代码:[src/main/java/org/apache/iotdb/TableModelSessionExample.java](https://github.com/apache/iotdb/blob/master/example/session/src/main/java/org/apache/iotdb/TableModelSessionExample.java) +Session 示例代码:[src/main/java/org/apache/iotdb/TableModelSessionExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionExample.java) -SessionPool 示例代码:[src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java](https://github.com/apache/iotdb/blob/master/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java) +SessionPool 示例代码:[src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java) ```Java /* diff --git a/src/zh/UserGuide/Master/Table/API/Programming-Java-Native-API_timecho.md b/src/zh/UserGuide/Master/Table/API/Programming-Java-Native-API_timecho.md index b031e2e88..ae979081b 100644 --- a/src/zh/UserGuide/Master/Table/API/Programming-Java-Native-API_timecho.md +++ b/src/zh/UserGuide/Master/Table/API/Programming-Java-Native-API_timecho.md @@ -425,7 +425,7 @@ TableSessionPool 的构造器,用于配置和创建 ITableSessionPool 的实 | trustStore(String keyStore) | 设置SSL连接的信任库路径 | null | | trustStorePwd(String keyStorePwd) | 设置SSL连接的信任库密码 | null | -#### 4.1.3 接口展示 +#### 4.2.3 接口展示 ```Java /** @@ -629,9 +629,9 @@ public class TableSessionPoolBuilder { ## 5. 示例代码 -Session 示例代码:[src/main/java/org/apache/iotdb/TableModelSessionExample.java](https://github.com/apache/iotdb/blob/master/example/session/src/main/java/org/apache/iotdb/TableModelSessionExample.java) +Session 示例代码:[src/main/java/org/apache/iotdb/TableModelSessionExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionExample.java) -SessionPool 示例代码:[src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java](https://github.com/apache/iotdb/blob/master/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java) +SessionPool 示例代码:[src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java](https://github.com/apache/iotdb/blob/rc/2.0.1/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java) ```Java /* diff --git a/src/zh/UserGuide/latest-Table/API/Programming-Java-Native-API_apache.md b/src/zh/UserGuide/latest-Table/API/Programming-Java-Native-API_apache.md index 8c1b8d28e..ca2005c9f 100644 --- a/src/zh/UserGuide/latest-Table/API/Programming-Java-Native-API_apache.md +++ b/src/zh/UserGuide/latest-Table/API/Programming-Java-Native-API_apache.md @@ -425,7 +425,7 @@ TableSessionPool 的构造器,用于配置和创建 ITableSessionPool 的实 | trustStore(String keyStore) | 设置SSL连接的信任库路径 | null | | trustStorePwd(String keyStorePwd) | 设置SSL连接的信任库密码 | null | -#### 4.1.3 接口展示 +#### 4.2.3 接口展示 ```Java /** diff --git a/src/zh/UserGuide/latest-Table/API/Programming-Java-Native-API_timecho.md b/src/zh/UserGuide/latest-Table/API/Programming-Java-Native-API_timecho.md index 936a5bada..ae979081b 100644 --- a/src/zh/UserGuide/latest-Table/API/Programming-Java-Native-API_timecho.md +++ b/src/zh/UserGuide/latest-Table/API/Programming-Java-Native-API_timecho.md @@ -425,7 +425,7 @@ TableSessionPool 的构造器,用于配置和创建 ITableSessionPool 的实 | trustStore(String keyStore) | 设置SSL连接的信任库路径 | null | | trustStorePwd(String keyStorePwd) | 设置SSL连接的信任库密码 | null | -#### 4.1.3 接口展示 +#### 4.2.3 接口展示 ```Java /**