gpt4 book ai didi

java - 我如何知道 Hibernate .list() 方法中的返回值是数组还是标量?

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:22 24 4
gpt4 key购买 nike

我正在使用以下非常基本的代码。我正在使用 Hibernate 对内部应用程序的只读 Oracle 数据库运行 native SQL 查询。我允许用户定义稍后运行的查询。

大多数查询将返回行集,这意味着许多列,也可能有许多行。

但是,假设有人使用“Select sysdate from DUAL”来测试某些内容...这将返回一个带有单个 Timestamp 类型项目的 Object[],因此下面的代码将会崩溃,因为它无法将 Timestamp 转换为 Object[]

我如何通过反射或其他方式知道外部数组中有什么,以便知道如何处理它?如果它只是一个对象而不是数组,我只想 toString() 它。如果它是一个数组,我想将每行的第一列串成一个字符串。我知道很奇怪,但我也确实在这里学习。

List<Object[]> rows = sqlQuery.list();

String result = "";
if (rows.isEmpty())
return "NORESULTS";
else
{
for(Object[] row : rows){
result+=row[0].toString();
}
return result;
}

最佳答案

您可以使用 obj.getClass().isArray() 来检查对象是否是数组,并使用 Array.get(obj, index) 来检索第一个索引。但请确保处理ArrayIndexOutOfBoundsException,以防数组为空。

private static String asString(Object obj) {
if (obj == null)
return "null";

Class<?> clazz = obj.getClass();
if (clazz.isArray()) {
try {
Object first = Array.get(obj, 0);
return String.valueOf(first);
} catch (ArrayIndexOutOfBoundsException e) {
return "empty array";
}
} else {
return String.valueOf(obj); // primitive or non-array object
}
}

public static void main(String[] args) {
Integer integer = Integer.valueOf(4);
String[] stringArray = new String[] { "a", "b" };
String nothing = null;
int primitive = 4;
char[] primitiveArray = { 'a', 'b' };
int[] emptyArray = new int[0];

System.err.println(asString(integer)); // 4
System.err.println(asString(stringArray)); // a
System.err.println(asString(nothing)); // null
System.err.println(asString(primitive)); // 4
System.err.println(asString(primitiveArray)); // a
System.err.println(asString(emptyArray)); // empty array
}

我希望这就是您所要求的。

编辑

结果列表如下:

private static List<String> rowsAsString(List<?> rows) {
if (rows == null || rows.isEmpty())
return Collections.emptyList();

List<String> strings = new ArrayList<>(rows.size());
for (Object row : rows) {
strings.add(asString(row));
}
return strings;
}

关于java - 我如何知道 Hibernate .list() 方法中的返回值是数组还是标量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com