
# IoTDB Java API接口介绍
IoTDB提供了一个针对原生接口的连接池（SessionPool），使用该接口时，您只需要指定连接池的大小，就可以在使用时从池中获取连接。如果超过60s没有得到一个连接，就会打印一条警告日志，但是程序仍将继续等待。
当一个连接被用完后，该连接会自动返回池中等待下次被使用；当一个连接损坏后，该连接会从池中被删除，并重建一个连接重新执行用户的操作。
对于查询操作：
1. 使用SessionPool进行查询时，得到的结果集是SessionDataSet的封装类SessionDataSetWrapper。
2. 若对于一个查询的结果集，用户并没有遍历完且不再想继续遍历时，需要手动调用释放连接的操作closeResultSet。
3. 若对一个查询的结果集遍历时出现异常，也需要手动调用释放连接的操作closeResultSet。
4. 可以调用SessionDataSetWrapper的getColumnNames()方法得到结果集列名。
表1Session对应的接口的简要介绍及对应参数 
| **方法**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | **说明**                                                            |
|:---|:---|
| - Session(String host, int rpcPort)  - Session(String host, String rpcPort, String username, String password)  - Session(String host, int rpcPort, String username, String password)                                                                                                                                                                                                                                                                                                        | 初始化Session。                                                       |
| Session.open()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 开启Session。                                                        |
| Session.close()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 关闭Session。                                                        |
| void setStorageGroup(String storageGroupId)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 设置存储组。                                                            |
| - void deleteStorageGroup(String storageGroup)  - void deleteStorageGroups(List\<String\> storageGroups)                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 删除单个或多个存储组。                                                       |
| - void createTimeseries(String path, TSDataType dataType, TSEncoding encoding, CompressionType compressor, Map\<String, String\> props, Map\<String, String\> tags, Map\<String, String\> attributes, String measurementAlias)  - void createMultiTimeseries(List\<String\> paths, List\<TSDataType\> dataTypes, List\<TSEncoding\> encodings, List\<CompressionType\> compressors, List\<Map\<String, String\>\> propsList, List\<Map\<String, String\>\> tagsList, List\<Map\<String, String\>\> attributesList, List\<String\> measurementAliasList)   | 创建单个或多个时间序列。                                                      |
| - void deleteTimeseries(String path)  - void deleteTimeseries(List\<String\> paths)                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 删除一个或多个时间序列。                                                      |
| - void deleteData(String path, long time)  - void deleteData(List\<String\> paths, long time)                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 删除一个或多个时间序列在某个时间点前或这个时间点的数据。                                      |
| void insertRecord(String deviceId, long time, List\<String\> measurements, List\<String\> values)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 插入一个Record，一个Record是一个设备一个时间戳下多个测点的数据。服务器需要做类型推断，可能会有额外耗时。        |
| void insertTablet(Tablet tablet)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 插入一个Tablet，Tablet是一个设备若干行非空数据块，每一行的列都相同。                          |
| void insertTablets(Map\<String, Tablet\> tablet)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 插入多个Tablet。                                                       |
| void insertRecords(List\<String\> deviceIds, List\<Long\> times, List\<List\<String\>\> measurementsList, List\<List\<String\>\> valuesList)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 插入多个Record。服务器需要做类型推断，可能会有额外耗时。                                   |
| void insertRecord(String deviceId, long time, List\<String\> measurements, List\<TSDataType\> types, List\<Object\> values)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 插入一个Record，一个Record是一个设备一个时间戳下多个测点的数据。提供数据类型后，服务器不需要做类型推断，可以提高性能。 |
| void insertRecords(List\<String\> deviceIds, List\<Long\> times, List\<List\<String\>\> measurementsList, List\<List\<TSDataType\>\> typesList, List\<List\<Object\>\> valuesList)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 插入多个Record。提供数据类型后，服务器不需要做类型推断，可以提高性能。                            |
| submitApplication(SubmitApplicationRequest request)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | Client通过此接口提交一个新的应用到RM。                                           |
| void insertRecordsOfOneDevice(String deviceId, List\<Long\> times, List\<List\<String\>\> measurementsList, List\<List\<TSDataType\>\> typesList, List\<List\<Object\>\> valuesList)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 插入属于同一个device的多个Record。                                           |
| SessionDataSet executeRawDataQuery(List\<String\> paths, long startTime, long endTime)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 原始数据查询。时间间隔包含开始时间，不包含结束时间。                                        |
| SessionDataSet executeQueryStatement(String sql)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 执行查询语句。                                                           |
| void executeNonQueryStatement(String sql)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 执行非查询语句。                                                          |
   
表2测试接口说明 
| **方法**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | **说明**                                        |
|:---|:---|
| - void testInsertRecords(List\<String\> deviceIds, List\<Long\> times, List\<List\<String\>\> measurementsList, List\<List\<String\>\> valuesList)  - void testInsertRecords(List\<String\> deviceIds, List\<Long\> times, List\<List\<String\>\> measurementsList, List\<List\<TSDataType\>\> typesList, List\<List\<Object\>\> valuesList)   | 测试testInsertRecords，不实际写入数据，只将数据传输到server即返回。 |
| - void testInsertRecord(String deviceId, long time, List\<String\> measurements, List\<String\> values)  - void testInsertRecord(String deviceId, long time, List\<String\> measurements, List\<TSDataType\> types, List\<Object\> values)                                                                                                    | 测试insertRecord，不实际写入数据，只将数据传输到server即返回。      |
| void testInsertTablet(Tablet tablet)                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 测试insertTablet，不实际写入数据，只将数据传输到server即返回。      |
   
