关于结果集的操作。 指定到指定记录可以在sql语句里面做到地?为什么要通过结果集做这个工作? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我做了一个表单查询页面,其中有“上一条”“下一条”“头条”“尾条”等。我先把所有数据读入结果集,然后想通过对结果集的操作来完成对数据库的操作。可是现在我的问题很奇怪。头条,尾条,都正常。就是上一条,每次按都显示上标越界(是我自己加的差错语句),而每次点击下一条,都只显示第一条,好像指针一只停留在结果集的首条记录上,没有移动过。可是为什么头条尾条可以正常工作?现在把源码贴出来,如下:<html><head><meta http-equiv="Content-Language" content="zh-cn"><meta name="GENERATOR" content="Microsoft FrontPage 5.0"><meta name="ProgId" content="FrontPage.Editor.Document"><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>Input Data</title></head><body bgcolor="#fdf5e6"><%response.setHeader("progma","no-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires",0);%> <%@page language="java" import="java.sql.*"%> <jsp:useBean id="codein" scope="page" class="database.dbbean"/> <%codein.init("jdbc:odbc:f_code","dbuser","dbpassword");%> <%! String val1=" ";%> <%! String val2=" ";%> <% ResultSet rs=codein.executeQuery("SELECT * FROM F_CODE");%> <% String strName = new String(request.getParameter("submit").getBytes("ISO-8859-1"));%> <% if(strName.equals("previous")){ rs.moveToCurrentRow(); if(rs.previous()){ val1=rs.getString("name"); val2=rs.getString("content");} else{ out.println("Overflow!"); } } else if(strName.equals("next")){ rs.moveToCurrentRow(); if(rs.next()){ val1=rs.getString("name"); val2=rs.getString("content");} else{ out.println("Underflow!"); } } else if(strName.equals("top")){ rs.first(); val1=rs.getString("name"); val2=rs.getString("content");} else if(strName.equals("bottom")){ rs.last(); val1=rs.getString("name"); val2=rs.getString("content");} else if(strName.equals("add")){ rs.moveToInsertRow(); val1=""; val2="";} else if(strName.equals("delete")){ rs.moveToCurrentRow(); rs.deleteRow(); val1=rs.getString("name"); val2=rs.getString("content");} else{ String nm=request.getParameter("name"); String ct=request.getParameter("content"); rs.updateString("name",nm); rs.updateString("content",ct); rs.insertRow();} %><p align="center">Input data</p><form method="POST" action="inputCode.jsp"> <!--怎么样才能使他有能力自动刷新?--> <table border="0" style="border-collapse: collapse" bordercolor="#111111" width="100%"> <tr> <td width="50%" align="right">field name </td> <td width="50%"><input type="text" name="name" size="20" value=<%=val1%>></td> </tr> <tr> <td width="50%" align="right">field content </td> <td width="50%"><input type="text" name="content" size="20" value=<%=val2%>></td> </tr> </table> <p></p><br> <table border="0" style="border-collapse: collapse" bordercolor="#111111" width="100%"> <tr> <td width="14%" align="center"> <input type="submit" value="previous" name="submit"></td> <td width="14%" align="center"> <input type="submit" value="next" name="submit"></td> <td width="14%" align="center"> <input type="submit" value="top" name="submit"></td> <td width="14%" align="center"> <input type="submit" value="bottom" name="submit"></td> <td width="14%" align="center"> <input type="submit" value="add" name="submit"></td> <td width="15%" align="center"> <input type="submit" value="delete" name="submit"></td> <td width="15%" align="center"> <input type="submit" value="save" name="submit"></td> </tr> </table></form></body></html>还有就是删除不能正常工作,每次都提示游标状态不合法。谁能帮我解决,我开新贴送200分! 送分帖已经开好:http://expert.csdn.net/Expert/topic/2087/2087863.xml?temp=.5034906http://expert.csdn.net/Expert/topic/2087/2087876.xml?temp=.4152338希望高手踊跃解答。 与bean中Statement 有关系,最好改成JDBCStatement statement = myconn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 如果改成了TYPE_SCOLL_INSENSITIVE,结果集不是就变成单向滚动的了吗?如何来实现“上一条”?CONCUR_READ_ONLY什么意思? 创建Statement时加上参数TYPE_SCROLL_SENSITIVE,Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY );要往前移动游标要设定createStatement的参数,具体是不是这个你自己查一下还有不明白的是,你每次都去取数据的话,怎么来取前一条和后一条啊? amortal(7086)大哥真是一针见血阿。问题我找到了,每次都执行resultset当然不行了。哈哈,心情好了很多。不过,后来我改了一下。<%! ResultSet rs=codein.executeQuery("SELECT * FROM F_CODE");%>把这句变成申明,我想申明总是只执行一次的,可是为什么又出现这个错误?Generated servlet error: [javac] Since fork is true, ignoring compiler setting. [javac] Compiling 1 source file [javac] Since fork is true, ignoring compiler setting. [javac] C:\jakarta-tomcat-4.1.24\work\Standalone\localhost\_\inputCode_jsp.java:13: cannot resolve symbol [javac] symbol : variable codein [javac] location: class org.apache.jsp.inputCode_jsp [javac] ResultSet rs=codein.executeQuery("SELECT * FROM F_CODE"); [javac] ^ [javac] 1 error申明里面不可以直接放吗?有什么办法是某句话只调用一次? rs中有一个absolute的方法它是来定义你的游标具体在什么地方的方法!你现在每次都刷新,当然你必须正确的得到游标的位置,否则每次刷新游标的位置都不正确!int PageSize = 3; //设置每张网页显示两笔记录int ShowPage = 1; //设置欲显示的页数int RowCount = 0; //ResultSet的记录笔数int PageCount = 0; //ResultSet分页后的总页数<% try{ db.openQueryDB(); rs = db.executeQuery(strSQL);// rs.last(); //将指标移至最后一笔记录// RowCount = rs.getRow(); //取得ResultSet中记录的笔数// //计算显示的页数// PageCount = ((RowCount % PageSize) == 0 ?// (RowCount/PageSize) : (RowCount/PageSize)+1); } catch(Exception ex) { System.out.println(ex.toString());%><%String ToPage = request.getParameter("ToPage");if(ToPage != null) //判断是否可正确取得ToPage参数{ ShowPage = Integer.parseInt(ToPage); //取得指定显示的分页页数 if(ShowPage > PageCount) //下面的if语句将判断用户输入的页数是否正确 { ShowPage = PageCount; //判断指定页数是否大于总页数, 是则设置显示最后一页 } else if(ShowPage <= 0) { ShowPage = 1; //若指定页数小于0, 则设置显示第一页的记录 }}rs.absolute((ShowPage - 1) * PageSize + 1); //计算欲显示页的第一笔记录位置然后相应的previous,next,delete这些操作都要对游标的位置进行处理! 我觉得每次从数据库力度出来当前页,用sql语句直接得到是本页信息,sql语句实现分页的话,速度也很快,效果也很好 struts中 download之后画面关闭的问题--急急。。。有劳达人指点 表单字段长度校验的问题 ASP怎样转化为JSP 最好的jsp开发模式 小弟想问一哪里有申请支持jsp的空间啊? 连库文件No ResultSet set was produced错误,请多指教。最近有点急! 大家看看这是什么错,谢谢,我还没见过呢 铁道部的破网站... 谁用过JCE,请教一下怎样设置自己的密钥? 问一下,ie带的jvm是什么版本? 急~~~!50分求救! 请问如何在一个jsp页面里嵌入一个servlet
我先把所有数据读入结果集,然后想通过对结果集的操作来完成对数据库的操作。
可是现在我的问题很奇怪。头条,尾条,都正常。
就是上一条,每次按都显示上标越界(是我自己加的差错语句),而每次点击下一条,都只显示第一条,好像指针一只停留在结果集的首条记录上,没有移动过。
可是为什么头条尾条可以正常工作?
现在把源码贴出来,如下:<html><head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Input Data</title>
</head><body bgcolor="#fdf5e6">
<%
response.setHeader("progma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
%> <%@page language="java" import="java.sql.*"%>
<jsp:useBean id="codein" scope="page" class="database.dbbean"/>
<%codein.init("jdbc:odbc:f_code","dbuser","dbpassword");%>
<%! String val1=" ";%>
<%! String val2=" ";%> <% ResultSet rs=codein.executeQuery("SELECT * FROM F_CODE");%> <% String strName = new String(request.getParameter("submit").getBytes("ISO-8859-1"));%> <% if(strName.equals("previous")){
rs.moveToCurrentRow();
if(rs.previous()){
val1=rs.getString("name");
val2=rs.getString("content");}
else{
out.println("Overflow!");
}
}
else if(strName.equals("next")){
rs.moveToCurrentRow();
if(rs.next()){
val1=rs.getString("name");
val2=rs.getString("content");}
else{
out.println("Underflow!");
}
}
else if(strName.equals("top")){
rs.first();
val1=rs.getString("name");
val2=rs.getString("content");}
else if(strName.equals("bottom")){
rs.last();
val1=rs.getString("name");
val2=rs.getString("content");}
else if(strName.equals("add")){
rs.moveToInsertRow();
val1="";
val2="";}
else if(strName.equals("delete")){
rs.moveToCurrentRow();
rs.deleteRow();
val1=rs.getString("name");
val2=rs.getString("content");}
else{
String nm=request.getParameter("name");
String ct=request.getParameter("content");
rs.updateString("name",nm);
rs.updateString("content",ct);
rs.insertRow();}
%><p align="center">Input data</p>
<form method="POST" action="inputCode.jsp"> <!--怎么样才能使他有能力自动刷新?-->
<table border="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
<tr>
<td width="50%" align="right">field name </td>
<td width="50%"><input type="text" name="name" size="20" value=<%=val1%>></td>
</tr>
<tr>
<td width="50%" align="right">field content </td>
<td width="50%"><input type="text" name="content" size="20" value=<%=val2%>></td>
</tr>
</table>
<p></p>
<br> <table border="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
<tr>
<td width="14%" align="center">
<input type="submit" value="previous" name="submit"></td>
<td width="14%" align="center">
<input type="submit" value="next" name="submit"></td>
<td width="14%" align="center">
<input type="submit" value="top" name="submit"></td>
<td width="14%" align="center">
<input type="submit" value="bottom" name="submit"></td>
<td width="14%" align="center">
<input type="submit" value="add" name="submit"></td>
<td width="15%" align="center">
<input type="submit" value="delete" name="submit"></td>
<td width="15%" align="center">
<input type="submit" value="save" name="submit"></td>
</tr>
</table></form>
</body>
</html>还有就是删除不能正常工作,每次都提示游标状态不合法。
谁能帮我解决,我开新贴送200分!
http://expert.csdn.net/Expert/topic/2087/2087863.xml?temp=.5034906
http://expert.csdn.net/Expert/topic/2087/2087876.xml?temp=.4152338
希望高手踊跃解答。
Statement statement = myconn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
如何来实现“上一条”?
CONCUR_READ_ONLY什么意思?
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY );
要往前移动游标要设定createStatement的参数,具体是不是这个你自己查一下还有不明白的是,你每次都去取数据的话,怎么来取前一条和后一条啊?
<%! ResultSet rs=codein.executeQuery("SELECT * FROM F_CODE");%>
把这句变成申明,我想申明总是只执行一次的,可是为什么又出现这个错误?
Generated servlet error:
[javac] Since fork is true, ignoring compiler setting.
[javac] Compiling 1 source file
[javac] Since fork is true, ignoring compiler setting.
[javac] C:\jakarta-tomcat-4.1.24\work\Standalone\localhost\_\inputCode_jsp.java:13: cannot resolve symbol
[javac] symbol : variable codein
[javac] location: class org.apache.jsp.inputCode_jsp
[javac] ResultSet rs=codein.executeQuery("SELECT * FROM F_CODE");
[javac] ^
[javac] 1 error
申明里面不可以直接放吗?
有什么办法是某句话只调用一次?
它是来定义你的游标具体在什么地方的方法!
你现在每次都刷新,当然你必须正确的得到游标的位置,否则每次刷新游标的位置都不正确!int PageSize = 3; //设置每张网页显示两笔记录
int ShowPage = 1; //设置欲显示的页数
int RowCount = 0; //ResultSet的记录笔数
int PageCount = 0; //ResultSet分页后的总页数<%
try{
db.openQueryDB();
rs = db.executeQuery(strSQL);// rs.last(); //将指标移至最后一笔记录
// RowCount = rs.getRow(); //取得ResultSet中记录的笔数
// //计算显示的页数
// PageCount = ((RowCount % PageSize) == 0 ?
// (RowCount/PageSize) : (RowCount/PageSize)+1);
}
catch(Exception ex)
{
System.out.println(ex.toString());%><%
String ToPage = request.getParameter("ToPage");
if(ToPage != null) //判断是否可正确取得ToPage参数
{
ShowPage = Integer.parseInt(ToPage); //取得指定显示的分页页数
if(ShowPage > PageCount) //下面的if语句将判断用户输入的页数是否正确
{
ShowPage = PageCount; //判断指定页数是否大于总页数, 是则设置显示最后一页
}
else if(ShowPage <= 0)
{
ShowPage = 1; //若指定页数小于0, 则设置显示第一页的记录
}
}
rs.absolute((ShowPage - 1) * PageSize + 1); //计算欲显示页的第一笔记录位置然后相应的previous,next,delete这些操作都要对游标的位置进行处理!
sql语句实现分页的话,速度也很快,效果也很好