急救:java.lang.String cannot be cast to [Ljava.lang.Obj

ph09227 2008-06-01 03:59:15
使用hibernate3.1,strut1.2,数据库用mssqlserver2000
在执行 String hql=" FROM Oauser as a " ;
Vector myList1=new Vector();
ArrayList result1 = new ArrayList();

Transaction t = null;
t = this.session.beginTransaction();
Query q = this.session.createQuery(hql);
result1 = (ArrayList) q.list();
t.commit();

Iterator myIterator1= result1.iterator();
Oauser oauser=new Oauser();
while (myIterator1.hasNext())
{
Object[] o = (Object[]) myIterator1.next();
oauser=(Oauser) o[0];
System.out.println(oauser.getPoliceid());
}
后,报错:

java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Obj
ect;

at common.db.dboperation.DbOperation.sendMessages(DbOperation.java:494)
at org.apache.jsp.oa.oapad.send_jsp._jspService(send_jsp.java:228)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:384)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
20)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ss(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:44
5)
at java.lang.Thread.run(Thread.java:619)


困扰我几天了。。。 但是前面有个查询,可以照常使用,没有提示字符类型不匹配问题。
急救!!
...全文
10509 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangjundns 2012-04-06
  • 打赏
  • 举报
回复
辉辉说的非常对,我的问题已经解决了,Thank you !
haidaoyu123 2012-04-06
  • 打赏
  • 举报
回复
foxfire9527 2012-04-06
  • 打赏
  • 举报
回复
Object[] o = (Object[]) myIterator1.next();
改成
Object o = (Object) myIterator1.next();
就可以了
foxfire9527 2012-04-06
  • 打赏
  • 举报
回复
Object[] o = (Object[]) myIterator1.next();
改成
Object o = (Object) myIterator1.next();
就可以了
qy498705982 2011-11-19
  • 打赏
  • 举报
回复
真悲催
hahaha19891006 2011-08-19
  • 打赏
  • 举报
回复
我也遇到这样的问题了,是在调用Java2Word.jar改写doc中的表格数据时报错的,还是不明白怎么回事~~~
my_mgh 2011-08-13
  • 打赏
  • 举报
回复
天啊,都是来问的,肿么没人解答啊……
qwe781569534 2011-06-01
  • 打赏
  • 举报
回复
me too
chengluwu 2010-04-09
  • 打赏
  • 举报
回复
俺今天也遇见了,哎哟可怜的人,谁来救救我吧?
不要爱上我 2009-07-08
  • 打赏
  • 举报
回复
我也遇到这样的问题 不解中...
我是小辉辉 2008-06-02
  • 打赏
  • 举报
回复
看来你是对Query不是太熟啊,from FROM Oauser as a
返回的是一个List这没错,但List里装的是Oauser实体类,也就是说
Oauser oauser=(Oarser)myIterator1.next();
但如果是:select a.col1,a.col2 From Oauser as a这样返回List里面是Ojbect[]
yami251139 2008-06-02
  • 打赏
  • 举报
回复
Query q = this.session.createQuery(hql);
========================
List result1 = this.session.createQuery(hql).list();
Iterator myIterator1= result1.iterator();
Oauser oauser=new Oauser();
while (myIterator1.hasNext())
{
里面直接list便利就可以了
}
xiaozhang0731 2008-06-02
  • 打赏
  • 举报
回复
hql 语句查出的是对象数组,因为在java里一切对象都继承了Object类
看看这句String hql=" FROM Oauser as a " ;
查出的是Oauser该类的所有属性的数组object[]
比如Oauser类里有name,password等
并且name是String类型
那么你取出的时候
就应该这样去定义String name=(String)object[0]
再看看这句异常java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Obj
ect; 一个String类型的变量不能付给这个oauser;
所以的话如果你想取到oauser;
就这样Object o = myIterator1.next();
oauser=(Oauser) o;
jdlsfl 2008-06-01
  • 打赏
  • 举报
回复
Object[] o = (Object[]) myIterator1.next();
oauser=(Oauser) o[0];

按你的思路改成这样应该也可以
Object o = myIterator1.next();
oauser=(Oauser) o;

jdlsfl 2008-06-01
  • 打赏
  • 举报
回复
Object[] o = (Object[]) myIterator1.next();

myIterator1.next不是对象数组,肯定不能用对象数组转换类型
直接就可以了
oauser=(Oauser) myIterator1.next();
Shine_Panda 2008-06-01
  • 打赏
  • 举报
回复
while (myIterator1.hasNext())
{
//Object[] o = (Object[]) myIterator1.next();
oauser=(Oauser) myIterator1.next();

System.out.println(oauser.getPoliceid());
}
还有前面直接用List接口就可以了
没有必要转为ArrayList

试下把。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧