通过 Java SDK 读取 SQL 查询结果中的 DATETIME、DATE 和 TIME 类型数据。
前提条件
安装Tablestore Java SDK并初始化客户端。
使用 5.16.0 及以上版本的 Tablestore Java SDK。
已创建映射关系。
功能说明
调用 sqlQuery 方法执行 SELECT 语句,并使用 SQL 日期和时间函数将数值转换为 DATETIME、TIME 或 DATE 类型。from_unixtime 的输入为秒级 Unix 时间戳。
SQLQueryResponse sqlQuery(SQLQueryRequest request)
getDateTime 返回 UTC 时区的时间。需要使用其他时区时,通过 withZoneSameInstant 转换时区。
以下示例将 example_table 映射表中 event_time 列的秒级 Unix 时间戳转换为日期和时间类型,并按列名读取转换结果。
String query = "SELECT "
+ "from_unixtime(event_time) AS datetime_value, "
+ "time(from_unixtime(event_time)) AS time_value, "
+ "date(from_unixtime(event_time)) AS date_value "
+ "FROM example_table WHERE tenant_id = 1 LIMIT 1";
SQLQueryRequest request = new SQLQueryRequest(query);
SQLQueryResponse response = client.sqlQuery(request);
SQLResultSet resultSet = response.getSQLResultSet();
while (resultSet.hasNext()) {
SQLRow row = resultSet.next();
ZonedDateTime dateTime = row.getDateTime("datetime_value");
Duration time = row.getTime("time_value");
LocalDate date = row.getDate("date_value");
System.out.println(dateTime.withZoneSameInstant(ZoneId.of("Asia/Shanghai")));
System.out.println(time);
System.out.println(date);
}
参数说明
SQLQueryRequest 包含以下参数。
|
名称 |
类型 |
说明 |
|
query(必选) |
String |
要执行的 |
返回值
SQLQueryResponse.rows 存储序列化的 SQL 查询结果。通过 getSQLResultSet() 获取解析后的 SQLResultSet,再从 SQLRow 中读取日期和时间类型的列值。
日期和时间类型读取方法
|
方法 |
返回类型 |
说明 |
|
|
ZonedDateTime |
按列序号读取 |
|
|
ZonedDateTime |
按列名读取 |
|
|
Duration |
按列序号读取 |
|
|
Duration |
按列名读取 |
|
|
LocalDate |
按列序号读取 |
|
|
LocalDate |
按列名读取 |