更新时间:2023-04-28 GMT+08:00

Java API

IoTDB提供了一个针对原生接口的连接池(SessionPool),使用该接口时,您只需要指定连接池的大小,就可以在使用时从池中获取连接。 如果超过60s没有得到一个连接,就会打印一条警告日志,但是程序仍将继续等待。

当一个连接被用完后,该连接会自动返回池中等待下次被使用; 当一个连接损坏后,该连接会从池中被删除,并重建一个连接重新执行用户的操作。

对于查询操作:

  1. 使用SessionPool进行查询时,得到的结果集是SessionDataSet的封装类SessionDataSetWrapper。
  2. 若对于一个查询的结果集,用户并没有遍历完且不再想继续遍历时,需要手动调用释放连接的操作closeResultSet。
  3. 若对一个查询的结果集遍历时出现异常,也需要手动调用释放连接的操作closeResultSet。
  4. 可以调用SessionDataSetWrapper的getColumnNames()方法得到结果集列名。
表1 Session对应的接口的简要介绍及对应参数

方法

说明

  • 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 即返回。