如何将结果从 Java 中的本机查询转换为字符串?
how to cast the result to String From Native Query in Java?
我有一个查询,它将 return 包含来自 Table 的 2 列的单条记录
我想把结果放到一个列表中,每个元素都有一个列值,但我一直在获取 ClassCastExceptoion
这是代码:
public List<String> getStatus(Long requestId) {
List result = new ArrayList();
if (requestId != null)
{
StringBuilder querySBuilder = new StringBuilder();
querySBuilder.append(" select R.request_status_id , L.request_status_desc ");
querySBuilder.append(" from Table1 R join Table2 L ");
querySBuilder.append(" on R.request_status_id = L.REQUEST_STATUS_Id ");
querySBuilder.append(" where R.REQUEST_ID = " + requestId);
System.out.print(querySBuilder.toString());
List resultList =
em.createNativeQuery(querySBuilder.toString()).getResultList();
Vector resultVec = (Vector)resultList.get(0);
int id = ((BigDecimal)resultVec.elementAt(0)).intValue();
String statusName = ((String)resultVec.elementAt(0));
System.out.println("id" + id);
System.out.println("name " + statusName);
result.add(id);
result.add(statusName);
if (resultVec == null || resultVec.isEmpty()) {
return new ArrayList<String>();
}
return result;
}
return null;
}
我认为这是一个打字错误。
字符串状态名称 = ((字符串)resultVec.elementAt(0));
应使用 elementAt(1) 而不是 elementAt(0)。
我将使用的模式是将传入的本机结果集表述为 List<Object[]>
,其中每个对象数组代表一条记录:
Query q = em.createNativeQuery(querySBuilder.toString());
List<Object[]> result = q.getResultList();
for (Object[] row : result) {
int id = (Integer)row[0];
String statusName = (String)row[1];
// do something with the id and statusName from above
}
我有一个查询,它将 return 包含来自 Table 的 2 列的单条记录 我想把结果放到一个列表中,每个元素都有一个列值,但我一直在获取 ClassCastExceptoion 这是代码:
public List<String> getStatus(Long requestId) {
List result = new ArrayList();
if (requestId != null)
{
StringBuilder querySBuilder = new StringBuilder();
querySBuilder.append(" select R.request_status_id , L.request_status_desc ");
querySBuilder.append(" from Table1 R join Table2 L ");
querySBuilder.append(" on R.request_status_id = L.REQUEST_STATUS_Id ");
querySBuilder.append(" where R.REQUEST_ID = " + requestId);
System.out.print(querySBuilder.toString());
List resultList =
em.createNativeQuery(querySBuilder.toString()).getResultList();
Vector resultVec = (Vector)resultList.get(0);
int id = ((BigDecimal)resultVec.elementAt(0)).intValue();
String statusName = ((String)resultVec.elementAt(0));
System.out.println("id" + id);
System.out.println("name " + statusName);
result.add(id);
result.add(statusName);
if (resultVec == null || resultVec.isEmpty()) {
return new ArrayList<String>();
}
return result;
}
return null;
}
我认为这是一个打字错误。
字符串状态名称 = ((字符串)resultVec.elementAt(0));
应使用 elementAt(1) 而不是 elementAt(0)。
我将使用的模式是将传入的本机结果集表述为 List<Object[]>
,其中每个对象数组代表一条记录:
Query q = em.createNativeQuery(querySBuilder.toString());
List<Object[]> result = q.getResultList();
for (Object[] row : result) {
int id = (Integer)row[0];
String statusName = (String)row[1];
// do something with the id and statusName from above
}