Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate.list()方法中,如何知道返回值是数组还是标量?_Java_Arrays_Hibernate - Fatal编程技术网

Java 在Hibernate.list()方法中,如何知道返回值是数组还是标量?

Java 在Hibernate.list()方法中,如何知道返回值是数组还是标量?,java,arrays,hibernate,Java,Arrays,Hibernate,我使用以下非常基本的代码。我正在使用Hibernate对内部应用程序的只读Oracle数据库运行本机SQL查询。我允许用户定义查询以便以后运行 大多数查询将返回行集,这意味着许多列,可能还有许多行 但是,假设有人使用“Select sysdate from DUAL”来测试某些东西。。。这将返回一个对象[],其中有一个类型为Timestamp的项,因此下面的代码将爆炸,因为它无法将Timestamp强制转换为对象[] 我如何通过反射或其他方式来判断外部阵列中的内容,从而知道如何处理它?如果它只是

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

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

但是,假设有人使用“Select sysdate from DUAL”来测试某些东西。。。这将返回一个对象[],其中有一个类型为Timestamp的项,因此下面的代码将爆炸,因为它无法将Timestamp强制转换为对象[]

我如何通过反射或其他方式来判断外部阵列中的内容,从而知道如何处理它?如果它只是一个对象而不是一个数组,我只想将它串起来。如果它是一个数组,我想把每行的第一列串成一个字符串。我知道很奇怪,但我也在这里学习

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

String result = "";
if (rows.isEmpty())
return "NORESULTS";
else
{
    for(Object[] row : rows){
        result+=row[0].toString();
    }
    return result;
}
List rows=sqlQuery.List();
字符串结果=”;
if(rows.isEmpty())
返回“NORESULTS”;
其他的
{
对于(对象[]行:行){
结果+=行[0]。toString();
}
返回结果;
}

您可以使用
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
}
私有静态字符串关联(对象obj){
if(obj==null)
返回“null”;
Class clazz=obj.getClass();
if(clazz.isArray()){
试一试{
objectfirst=Array.get(obj,0);
返回字符串.valueOf(第一个);
}捕获(阵列索引边界外异常e){
返回“空数组”;
}
}否则{
返回字符串.valueOf(obj);//原语或非数组对象
}
}
公共静态void main(字符串[]args){
整数=整数。值为(4);
字符串[]stringArray=新字符串[]{“a”,“b”};
字符串nothing=null;
int基元=4;
char[]primitiveArray={a',b'};
int[]emptyArray=新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));//空数组
}
我希望这是你要求的

编辑

结果列表如下:

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;
}
私有静态列表行字符串(列表行){
if(rows==null | | rows.isEmpty())
返回集合。emptyList();
列表字符串=新的ArrayList(rows.size());
用于(对象行:行){
add(关联字符串(行));
}
返回字符串;
}

您可以使用
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
}
私有静态字符串关联(对象obj){
if(obj==null)
返回“null”;
Class clazz=obj.getClass();
if(clazz.isArray()){
试一试{
objectfirst=Array.get(obj,0);
返回字符串.valueOf(第一个);
}捕获(阵列索引边界外异常e){
返回“空数组”;
}
}否则{
返回字符串.valueOf(obj);//原语或非数组对象
}
}
公共静态void main(字符串[]args){
整数=整数。值为(4);
字符串[]stringArray=新字符串[]{“a”,“b”};
字符串nothing=null;
int基元=4;
char[]primitiveArray={a',b'};
int[]emptyArray=新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));//空数组
}
我希望这是你要求的

编辑

结果列表如下:

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;
}
私有静态列表行字符串(列表行){
if(rows==null | | rows.isEmpty())
返回集合。emptyList();
列表字符串=新的ArrayList(rows.size());
用于(对象行:行){
add(关联字符串(行));
}
返回字符串;
}

是!这一针见血!谢谢你的快速回复!对这一针见血!谢谢你的快速回复!