今天的hibernate出现一个错误
1.异常。
Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在
异常很明显。马上想到的是数据库连接是不是改了。我之前的用户名是htest,后面改成htest1。立刻改掉。
<property name="connection.username">htest1property>
还是报错。
继续改xml文件:在entity类中的xml存在:
table="MEMBERSINFO" schema="htest1"
这里的schema改掉就好了。
2.分页问题。
此次的分页只有上一页和下一页。很简单,没有写单独的page类,直接看方法。
@Override
public List pagesQuery(int pageIndex,int pageSize) {
Session session=HibernateUtil.currentSession();
String hql="from Membersinfo order by mid";
Query query=session.createQuery(hql);
pageSize=3;
pageIndex=1;
query.setMaxResults(pageSize);
query.setFirstResult((pageIndex-1)*pageSize);
List list=query.list();
return list;
}
@Override
public int querySum() {
Session session=HibernateUtil.currentSession();
String hql="select count(*) from Membersinfo ";
//int num=(Integer) session.createQuery(hql).uniqueResult();
int num=new Integer(session.createQuery(hql).uniqueResult().toString());
//long num= (Long) session.createQuery(hql).uniqueResult();
return num;
}
方法似乎没问题。在看jsp页面;
<a href="Servlet?opr=up&page=${sessionScope.pageIndex-1}">上一页a>
<a href="Servlet?opr=down&page=${sessionScope.pageIndex+1}">下一页a>
Servlet判断页面:
else if ("up".equals(opr)) {
String page = request.getParameter("page");
if ("0".equals(page)) {
out.print("");
} else {
pageIndex = new Integer(page);
PapeShow(request, response, pageIndex, pageSize, biz);
}
} else if ("down".equals(opr)) {
String page = request.getParameter("page");
int num = biz.querySum();
int totalPage = (num % pageSize == 0) ? num / pageSize : (num
/ pageSize + 1);
int tpage = new Integer(page);
if (tpage > totalPage) {
out.print("");
} else {
pageIndex = new Integer(page);
System.out.println(pageIndex);
PapeShow(request, response, pageIndex, pageSize, biz);
}
}
else {
PapeShow(request, response, pageIndex, pageSize, biz);
}
最后一个else考虑到第一次进入的情况。
看提取的方法:
private void PapeShow(HttpServletRequest request,
HttpServletResponse response, int pageIndex, int pageSize,
IMembersinfoBiz biz) throws IOException {
List list = biz.pagesQuery(pageIndex, pageSize);
request.getSession().setAttribute("pageIndex", pageIndex);
request.getSession().setAttribute("pageSize", pageSize);
request.getSession().setAttribute("list", list);
try {
request.getRequestDispatcher("index.jsp")
.forward(request, response);
// response.sendRedirect("index.jsp");
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
注意,这里使用重定向会导致当前页面的变动。
公共提取的部分:
IMembersinfoBiz biz = new MembersinfoBizImpl();
String opr = request.getParameter("opr");
int pageIndex = 1;
int pageSize = 3;
这时:出现的bug就是,在方法中直接把pageIndex,pageSize也死了。pageSize,没问题。错就错在pageIndex,要想分页正常完成。
解决方案一:
if (pageIndex<=1) {
pageIndex=1;
}
解决方案二:全部去掉。因为在Servlet中,你已经能够给默认值了。
public List<Membersinfo> pagesQuery(int pageIndex,int pageSize) {
Session session=HibernateUtil.currentSession();
String hql="from Membersinfo order by mid";
Query query=session.createQuery(hql);
query.setMaxResults(pageSize);
query.setFirstResult((pageIndex-1)*pageSize);
List<Membersinfo> list=query.list();
return list;
}
这样分页ok。
跳转时,要注意的问题:
out.print("<script>alert('修改成功');location='Servlet';script>");
out.print("<script>alert('已经是第一页了!');history.go(-1);script>");
说白了就是location与history的区别。
3.几个特别无语的jsp细节。
if test="${l.mgender eq '男' }">
type="radio" name="radio" id="boy" value="男" checked="checked" />男
type="radio" name="radio" id="gril" value="女" /> 女
if>
if test="${l.mgender eq '女' }">
type="radio" name="radio" id="boy" value="男" />男
type="radio" name="radio" id="gril" value="女" checked="checked" />
if>
当然也可以换成另外一种写法。
type="radio" name="radio" id="boy" value="男"
if test="${l.mgender eq '男' }">
checked="checked"
if>
/>男
type="radio" name="radio" id="gril" value="女"
if test="${l.mgender eq '女' }">
checked="checked"
if>
/> 女
错误:1.name属性不一致。
2.通过name获取到的是value值。value值,要根据题干需求设置。最怕写成value=“ 男”,引号中存在空格,读取时也会读出来的,如果你的数据类型为nvarchar2(2),肯定bug。就是没bug,也影响页面的细微的排版。小心为上。