所以我创建了一个将数据库记录显示到html文本框中的代码,我可以移动到下一条记录并使用我分配给按钮的javascript函数移回记录。但是我在创建一个允许我移动到最后一个记录的功能和一个按钮以回到第一个记录时遇到了麻烦。
<%@ page import="java.sql.*" %>
<% Class.forName("com.mysql.jdbc.Driver");%>
<HTML>
<HEAD>
</HEAD>
<BODY>
<FORM NAME="form1" METHOD="POST">
<%
int current = 1;
if (request.getParameter("hidden") != null) {
current = Integer.parseInt(request.getParameter("hidden"));
}
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost", "root", "symphonia23");
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
statement.executeQuery("use books");
ResultSet resultset = statement.executeQuery("select * from books");
if (current < 1) {
current = 1;
}
resultset.last();
int rows = resultset.getRow();
if (current <= rows) {
resultset.absolute(current);
}
%>
Code: <input type="text" id="code" value="<%=resultset.getString("BookCode")%>"><br>
Book Title: <input type="text" name="Code" value="<%=resultset.getString("BookTitle")%>"><br>
Book Price: <input type="text" name="Code" value="<%=resultset.getString("BookPrice")%>"><br>
<BR>
<INPUT TYPE="HIDDEN" NAME="hidden" VALUE="<%= current%>">
<INPUT TYPE="BUTTON" VALUE="Next" ONCLICK="moveNext()">
<INPUT TYPE="BUTTON" VALUE="Prev" ONCLICK="movePrevious()">
<INPUT TYPE="BUTTON" VALUE="First" ONCLICK="movefirst()">
</FORM>
<SCRIPT LANGUAGE="JavaScript">
<!--
function moveNext()
{
var counter = 0
counter = parseInt(document.form1.hidden.value) + 1
document.form1.hidden.value = counter
form1.submit()
}
function movePrevious()
{
var counter = 0
counter = parseInt(document.form1.hidden.value) - 1
document.form1.hidden.value = counter
form1.submit()
}
function movefirst()
{
var counter = 0
counter = parseInt(document.form1.hidden.value)
document.form1.hidden.value = counter
form1.submit()
}
// -->
</SCRIPT>
</BODY>
</HTML>
答案 0 :(得分:0)
在moveFirst()方法中,你有一行
中的错误counter = parseInt(document.form1.hidden.value)
您必须将其删除。它总是重写计数器值,而计数器必须等于0
function movefirst()
{
document.form1.hidden.value = 0
form1.submit()
}
使用你的功能,我不可能(我认为)创建moveLast()方法,因为你不知道结果集的最后一个索引。所以你必须创建新的Parameter ='count'并放置行(记录数)值。 例如:
int rows = resultset.getRow();
request.setAttribute("count", rows);
通过这种方式,您的方法moveLast()将类似于
function moveLast()
{
document.form1.hidden.value = parseInt(document.form1.count.value)
form1.submit()
}
抱歉我的英语:)
P.S。最好使用延迟加载数据。尝试将LIMIT引入您的查询并为记录的搜索计数创建第二个查询
答案 1 :(得分:0)
获取有关结果集有多大的信息:
int total = resultSet.size();
然后在函数中使用它,它将带你到最后的结果。这取决于您一次显示的结果数量。如果您每次只显示一个结果,则只需将current
设置为最后一个结果:
function moveLast()
{
// array starts from 0
document.form1.hidden.value = ${total} - 1;
form1.submit()
}
否则将其设置为total - amount of records you show
。例如,如果您在文本框中显示5个结果,请使用:
function moveLast()
{
if(${total}>5){
document.form1.hidden.value = (${total} - 5);
}else{
document.form1.hidden.value = 0;
}
form1.submit()
}
我希望我能正确理解你的问题并且我的代码没有任何错误..我暂时没有使用JSP:)