我尝试通过单击浏览器上的提交按钮来获取Oracle中的先前记录,但出现异常java.sql.SQLSyntaxErrorException:ORA-00905:缺少关键字,我在下面做错了什么代码??
我有一个名为 abc 的表,其两列分别名为 F 和 S,有 5 条记录。
实际上我想做的是单击下一个按钮后,我将从数据库中获取下一条记录,但是当我单击上一个按钮时,应该获取上一条记录,但它不起作用。我哪里错了??
对于 NEXT 按钮,我将发送到另一个 servlet (NewServlet1.java),并代替 PREVIOUS,我编写了 NEXT,它工作正常,但是对于 PREVIOUS 按钮,我在 sql 查询中将 NEXT 替换为 PREVIOUS,并将其放入 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);
显示.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>
最佳答案
From the documentation和 syntax diagram ,FETCH
后面必须跟有 FIRST
或 NEXT
(它们是可以互换的)。没有 PREVIOUS
选项。您没有提供预期的关键字之一,因此您收到 ORA-00905。
要返回一行,您需要根据计数器比您想象的少偏移一行,然后获取NEXT ROW
。因此,如果您当前正在查看第 10 行,则需要偏移 8 行并获取下一行,即第 9 行。
关于java - 通过servlet获取sql中的上一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28454887/