通过servlet获取sql中的上一条记录

时间:2015-02-11 12:53:13

标签: java sql oracle jsp servlets

我试图通过单击浏览器上的提交按钮来获取oracle中的上一条记录,但异常即将到来 java.sql.SQLSyntaxErrorException:ORA-00905:缺少关键字,我在下面的内容中做错了代码??

我有一个名为 abc 的表格,其两列名为 F S 有5条记录。

实际上我想要做的是点击下一个按钮后我从数据库中获取下一条记录但是当我点击上一个按钮时,前一条记录应该被取出,它不起作用。哪里我错了?

对于NEXT按钮我发送到另一个servlet(NewServlet1.java)并且代替PREVIOUS我写了NEXT并且它工作正常但是对于PREVIOUS按钮我在sql查询中用PREVIOUS替换NEXT并将它放在New Servlet中但是不工作......

针对home.jsp

<form action="NewServlet1" method="post">
<input type="submit" value="NEXT">
</form>

NewServlet.java

String count = request.getParameter("count");
int c = 0;
if(count != null && count.matches("\\d+")){
c = Integer.parseInt(count);
          rs=st.executeQuery("SELECT * FROM abc ORDER BY 'F','S' OFFSET "+String.valueOf(c) +" ROWS FETCH PREVIOUS 1 ROWS ONLY");
    }
    else{

  rs=st.executeQuery("SELECT * FROM abc ORDER BY 'F','S' FETCH PREVIOUS 1 ROWS ONLY");
}

request.setAttribute("count",++c);
request.getRequestDispatcher("display.jsp").forward(request, response);

display.jsp

<form action="NewServlet" method="post">
<input type="text" name="count"  value="<%(Integer)request.getAttribute("count")%>" style="display:none;">
<input type="submit" value="PREVIOUS">
  </form>

1 个答案:

答案 0 :(得分:2)

From the documentationsyntax diagramFETCH必须跟FIRSTNEXT(可互换)。没有PREVIOUS选项。您没有提供其中一个预期的关键字,因此您可以获得ORA-00905。

要返回一行,您需要根据计数器偏移少一行,然后获取NEXT ROW。因此,如果您正在查看第10行,则需要偏移8并获得下一个,这将是第9行。