如何在Kotlin中从AWS QLDB的driver.execute返回指定对象
在Kotlin中从QLDB的driver.execute方法返回指定对象
你当前的代码有两个核心问题:一是存在语法错误,二是没有正确处理Result对象来提取目标数据。
问题1:语法错误
你的代码里txn.execute("SELECT * FROM Table")后面多了一个多余的右括号,这会直接导致编译失败,先把这个括号删掉。
问题2:未正确转换Result为目标对象
QLDB的Result本质是IonValue的迭代器,不能直接强转为IonStruct。你需要像Java示例那样遍历结果,提取需要的对象。
修正后的完整示例代码
如果要返回查询结果中的所有IonStruct:
val executionReturn = driver.execute { txn: TransactionExecutor -> val result: Result = txn.execute("SELECT * FROM Table") // 遍历Result,把每个IonValue转为IonStruct并收集到列表 result.map { it as IonStruct }.toList() } // 使用返回的列表 executionReturn.forEach { struct -> // 处理每个IonStruct,比如获取字段值 val fieldValue = struct.get("yourFieldName").stringValue() }
如果只需要返回第一个结果:
val executionReturn = driver.execute { txn: TransactionExecutor -> val result: Result = txn.execute("SELECT * FROM Table") // 取第一个结果,转为IonStruct,没有结果的话返回null result.firstOrNull() as? IonStruct } executionReturn?.let { struct -> // 处理单个IonStruct }
关键说明
driver.execute的lambda表达式最后一行的返回值,就是整个execute方法的返回值,和Java示例中匿名函数的return逻辑一致。- 一定要遍历
Result来提取IonValue,因为Result本身不是集合,是懒加载的迭代器,直接强转会抛出类型转换异常。
内容的提问来源于stack exchange,提问作者André Luís Oliveira
相关产品推荐
相关产品推荐

