Java中如何将SQL单条查询结果转为字符串列表并正确打印?
问题描述
需要从数据库单条SQL查询结果中获取对象列表,转换为字符串列表后打印结果(或按索引打印数组元素)。现有代码如下:
Query q = entityManager.createNativeQuery(env.getProperty("buyback-feedback-update")); List<Object[]> d = q.getResultList(); List<String> list = new ArrayList<>(); for (Object value : d) { if (value instanceof String) { String str = (String) value; list.addAll(Arrays.asList(str.split(","))); } } String[] array = list.toArray(new String[list.size()]); System.out.println(array);
运行后终端日志:
Hibernate: select ARBTRT_STATUS_FLAG,ARBTRT_CLOSED_BY_ID,ARBTRT_CLOSING_DT,MODIFY_BY_ID,MODIFY_TIMSTM from arbitration_request ORDER BY MODIFY_TIMSTM DESC FETCH FIRST 1 ROWS ONLY [Ljava.lang.String;@c94526
直接输出对象列表能正常显示结果,说明SQL有效,问题出在对象转字符串的逻辑上。
修正方案
问题根源
- 查询返回的是
List<Object[]>,每个元素是包含多列数据的对象数组,不是单个String,因此value instanceof String判断永远不成立,导致list始终为空。 - 直接打印数组
System.out.println(array)会输出数组的内存地址,这是Java数组默认的toString()行为。
修改后的代码
import java.util.Arrays; // ... 其他必要导入 Query q = entityManager.createNativeQuery(env.getProperty("buyback-feedback-update")); List<Object[]> resultList = q.getResultList(); List<String> stringList = new ArrayList<>(); // 遍历每一行查询结果(SQL仅返回1行,循环仅执行1次) for (Object[] row : resultList) { // 遍历当前行的每一列数据,转换为字符串 for (Object columnValue : row) { // 处理null值,避免空指针异常 stringList.add(columnValue != null ? columnValue.toString() : ""); } } String[] stringArray = stringList.toArray(new String[stringList.size()]); // 正确打印数组全部内容 System.out.println(Arrays.toString(stringArray)); // 按索引打印指定元素(数组索引从0开始) if (stringArray.length > 0) { System.out.println("第1个元素:" + stringArray[0]); } if (stringArray.length > 1) { System.out.println("第2个元素:" + stringArray[1]); }
简化版(针对单条结果)
因为SQL仅返回1行数据,可省略外层循环,直接取第一条结果:
if (!resultList.isEmpty()) { Object[] singleRow = resultList.get(0); List<String> stringList = new ArrayList<>(); for (Object val : singleRow) { stringList.add(val != null ? val.toString() : ""); } String[] stringArray = stringList.toArray(new String[stringList.size()]); System.out.println(Arrays.toString(stringArray)); }
内容的提问来源于stack exchange,提问作者Johny Leo
相关产品推荐
相关产品推荐

