我有以下内容,但出现错误
java.lang.String 无法转换为 [Ljava.lang.String;
我已将 Object[]
更改为 String[]
因为我遇到了下一个错误:
java.lang.Object 无法转换为 [Ljava.lang.String;
任何想法?
private Collection queryStatement(String SelectStatement) {
int colcount = 0;
int rowcount = 0;
int rowcounter = 0;
ArrayList a = new ArrayList();
Query query = getEntityManager().createNativeQuery(SelectStatement);
List<String[]> resultList = (List<String[]>) query.getResultList();
if (!resultList.equals(Collections.emptyList())) {
rowcount = resultList.size();
}
if (rowcount > 0) {
colcount = ((String[]) query.getResultList().get(0)).length;
}
rows = rowcount;
cols = colcount;
String[][] array = new String[rowcount][colcount];
for (String[] obj : resultList) {
String[] record = new String[colcount];
for (int colCounter = 0; colCounter < colcount; colCounter++) {
record[colCounter] = safeValue(obj[colCounter]+"");
}
array[ rowcounter++] = (String[]) record;
}
a.add(array);
return a;
}
原文由 Giorgos 发布,翻译遵循 CC BY-SA 4.0 许可协议
当您尝试将
String
String
数组时,会发生此错误。例如:
For me you get this error because
query.getResultList()
returns aList<String>
orList<Object>
instead ofList<String[]>
such that when you try to cast a value as aString[]
你得到这个异常。根据 Javadoc createNativeQuery(String ) 返回类型
Object[]
Object
结果,如果选择列表中只有一列。方法#1
修复它的一种简单方法是依赖 原始类型 作为结果(这不是最优雅的方法,而是最简单的方法),然后您可以检查列表内容的类型以正确转换它。
然后检查类型,您可以继续下一步:
方法#2
一种更优雅的方法可能是创建一个
Entity
类并使用createNativeQuery(String sqlString, Class entityClass)
来创建您的查询,这样它会自动将您的列映射到您的字段Entity
这是它的样子