gpt4 book ai didi

java.lang.String 无法转换为 [Ljava.lang.String;

转载 作者:搜寻专家 更新时间:2023-10-31 19:44:09 25 4
gpt4 key购买 nike

我有以下内容,但出现错误

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;
}

最佳答案

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()返回 List<String>List<Object>而不是 List<String[]>这样当您尝试将值转换为 String[] 时你得到这个异常(exception)。


根据 Javadoc createNativeQuery(String ) 返回 Object[] 类型的结果或 Object 类型的结果如果选择列表中只有一列。

方法#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类和使用 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();
...
}

关于java.lang.String 无法转换为 [Ljava.lang.String;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638394/

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