使用DSE Java Driver查询返回结果类型异常求助
问题原因与解决办法
这种情况通常是因为你在处理查询结果时,没有直接提取目标列的具体值,而是把整个查询行转换成了Map结构。我来拆解一下原因和对应的修复方案:
核心原因
当你使用DSE Java Driver执行查询时,如果你的代码直接把Row对象转换成了LinkedHashMap(比如调用了Row.toMap()方法),或者用了通用的对象获取方式却没指定列名和类型,Driver就会返回包含列名-列值映射的Map,而不是你期望的纯字符串值。
举个例子,如果你的查询是类似:
String query = "SELECT result FROM your_table WHERE ..."; ResultSet rs = session.execute(query);
但你处理结果的代码是这样的:
List<Object> results = rs.all().stream() .map(Row::toMap) // 这里把每行转成了Map结构 .collect(Collectors.toList());
那得到的自然是包含LinkedHashMap的List,每个Map里就会有result作为键,对应的值是你要的字符串。
修复方案
你需要明确从每一行中提取指定列的字符串值,而不是转换整个行。修改后的代码应该是这样的:
List<String> results = rs.all().stream() .map(row -> row.getString("result")) // 直接提取"result"列的字符串值 .collect(Collectors.toList());
另外还有几个需要注意的点:
- 确保你的查询语句确实只返回了
result这一列(或者你明确要提取的目标列) - 如果列的类型不是字符串,要对应使用
getInt()、getLong()等类型匹配的方法,避免类型转换错误 - 如果你用的是异步查询,处理
CompletionStage<ResultSet>时也要遵循同样的提取逻辑
这样处理后,你得到的List就会直接包含"vadas"和"josh"这两个字符串了。
内容的提问来源于stack exchange,提问作者user2055585
相关产品推荐
相关产品推荐

