好长时间没练习SSH2,今天在将自己之前的简单web项目改造成ssh2时,出现了很多简单的错误,但自己处理时还是花费了很长时间,现在就临时总结一下:
开始环境的搭建,我使用的是myeclipse 2015ci,首先在为工程添加框架时,顺序也是比较重要的,应该先添加spring,再添加hibernate,这样连接数据库的部分就会在applicationContext.xml文件中。
在使用hibernate时,出现了两个小问题:
(1)HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/Bi
这个错误发生的原因是:
String sql="select * from TbGoods where goodsCategoryId="+kind;
Query query=getCurrentSession().createQuery(sql);
其实就是将sql和hql搞混了,在hql中,应该这样改成这样:
String sql="from TbGoods where goodsCategoryId="+kind;
(2)第二个并没有报错,但是结果不对,原先的写法是这样的:
String sql="from TbGoods where goodsName like '%"+name+"%'";
Query query=getCurrentSession().createQuery(sql);
name是一个中文字符串,运行后,结果List长度总是为0,后来通过网上,修改了一下写法,改为:
String sql="from TbGoods where goodsName like ?";
Query query=getCurrentSession().createQuery(sql);
query.setString(0, "%"+name+"%");
错误没有了,但是又发现了另外一种潜在的错误:java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
这种错误就是Struts2中的antlr包的版本太低所致,因此就关闭myeclipse,把hibernate中的高版本antlr复制一份,名称改为原先Struts2中antlr的名字,然后将Struts2中的antlr包删掉,把刚才复制的包粘过去,重新启动myeclipse,运行成功。