Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在,分页等关于hibernate测试的几个问题

今天的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的区别。

  • 记住一个跟“=”,一个跟“.”,location后面是”.”就得跟上href。当然这个.href可以省略。
  • 看单词意思。然后找区别:history的作用是保存浏览器历史信息。location对象的作用是提供浏览器当前浏览资源的地址信息。

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,也影响页面的细微的排版。小心为上。

你可能感兴趣的:(hibernate)