java.lang.String 无法转换为 [Ljava.lang.String;
java.lang.String cannot be cast to [Ljava.lang.String;
我有以下内容,但出现错误
java.lang.String cannot be cast to [Ljava.lang.String;
我已将 Object[]
更改为 String[]
因为我遇到了下一个错误:
java.lang.Object cannot be cast to [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;
}
行
ArrayList a = new ArrayList();
是一个 raw type,因此(可能)代码中的所有对象都可以被视为 Object
。
尝试
ArrayList<String[][]> a = new ArrayList<>();
在您的代码中的某个时刻,您试图将 String 转换为 String[]。您的堆栈跟踪会告诉您确切位置。
除此之外,您的代码还有很多其他问题。
java.lang.String cannot be cast to [Ljava.lang.String;
当您尝试将 String
转换为 String
数组时会出现此错误。
例如:
List list = new ArrayList<>();
list.add("foo");
String[] values = (String[])list.get(0); -> throws the exception
对我来说,你得到这个错误是因为 query.getResultList()
returns 一个 List<String>
或 List<Object>
而不是 List<String[]>
这样当你尝试转换一个值时作为 String[]
你得到这个例外。
根据 Javadoc createNativeQuery(String) returns 类型 Object[]
的结果或类型 Object
的结果,如果 [=57] 中只有一列=]列表。
方法 #1
一个简单的修复方法,可能是依赖于 原始类型 的结果(这不是最优雅的方法,而是最简单的方法)然后你可以检查列表内容的类型以正确转换它。
List result = query.getResultList();
然后检查类型你可以继续下一步:
if (resultList.isEmpty() || resultList.get(0) instanceof Object[]) {
// Several columns in the result
List<Object[]> resultList = (List<Object[]>) result;
// The rest of your current code here
} else {
// Only one column in the result
List<Object> resultList = (List<Object>) result;
...
}
方法 #2
一种更优雅的方法可能是创建一个 Entity
class 并使用 createNativeQuery(String sqlString, Class entityClass)
创建您的查询,这样它会自动将您的列映射到您的 Entity
这是它的样子
private Collection<T> queryStatement(String SelectStatement, Class<T> resultType) {
...
Query query = getEntityManager().createNativeQuery(SelectStatement, resultType);
List<T> resultList = (List<T>) query.getResultList();
...
}
这样做:
List<String> resultList = (List<String>) query.getResultList();
if (!resultList.equals(Collections.emptyList())) {
rowcount = resultList.size();
}
if (rowcount > 0) {
colcount = resultList.get(0).length;
}
我有以下内容,但出现错误
java.lang.String cannot be cast to [Ljava.lang.String;
我已将 Object[]
更改为 String[]
因为我遇到了下一个错误:
java.lang.Object cannot be cast to [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;
}
行
ArrayList a = new ArrayList();
是一个 raw type,因此(可能)代码中的所有对象都可以被视为 Object
。
尝试
ArrayList<String[][]> a = new ArrayList<>();
在您的代码中的某个时刻,您试图将 String 转换为 String[]。您的堆栈跟踪会告诉您确切位置。
除此之外,您的代码还有很多其他问题。
java.lang.String cannot be cast to [Ljava.lang.String;
当您尝试将 String
转换为 String
数组时会出现此错误。
例如:
List list = new ArrayList<>();
list.add("foo");
String[] values = (String[])list.get(0); -> throws the exception
对我来说,你得到这个错误是因为 query.getResultList()
returns 一个 List<String>
或 List<Object>
而不是 List<String[]>
这样当你尝试转换一个值时作为 String[]
你得到这个例外。
根据 Javadoc createNativeQuery(String) returns 类型 Object[]
的结果或类型 Object
的结果,如果 [=57] 中只有一列=]列表。
方法 #1
一个简单的修复方法,可能是依赖于 原始类型 的结果(这不是最优雅的方法,而是最简单的方法)然后你可以检查列表内容的类型以正确转换它。
List result = query.getResultList();
然后检查类型你可以继续下一步:
if (resultList.isEmpty() || resultList.get(0) instanceof Object[]) {
// Several columns in the result
List<Object[]> resultList = (List<Object[]>) result;
// The rest of your current code here
} else {
// Only one column in the result
List<Object> resultList = (List<Object>) result;
...
}
方法 #2
一种更优雅的方法可能是创建一个 Entity
class 并使用 createNativeQuery(String sqlString, Class entityClass)
创建您的查询,这样它会自动将您的列映射到您的 Entity
这是它的样子
private Collection<T> queryStatement(String SelectStatement, Class<T> resultType) {
...
Query query = getEntityManager().createNativeQuery(SelectStatement, resultType);
List<T> resultList = (List<T>) query.getResultList();
...
}
这样做:
List<String> resultList = (List<String>) query.getResultList();
if (!resultList.equals(Collections.emptyList())) {
rowcount = resultList.size();
}
if (rowcount > 0) {
colcount = resultList.get(0).length;
}