读书人

jsp连mysql上的迷惑

发布时间: 2011-12-08 21:33:54 作者: rapoo

jsp连mysql上的困惑
小弟刚开始学习Jsp不久,在连mysql数据库时遇到太多问题了,望大家能帮帮我.
调用几次连接Mysql数据库javabean类后,出现无法得到正确的查询数据集
(index.jsp代码)

<jsp:useBean id= "mysql " scope= "page " class= "myblog.MyDataSource "> </jsp:useBean>
<%
String sql= "select * from myblog ";
String ID=null;
ResultSet rs =mysql.query(sql);
rs.previous();
int i=1;
while(rs.next())
{
%>
<tr>
<td width= "16 " height= "20 "> <%=i%> </td>
<td width= "371 "> <a href= "Showblog.jsp?ID= <%=rs.getString(1)%> "> <%=rs.getString(3)%> </a> </td>
<td width= "77 "> <%=rs.getString(2)%> </td>
</tr>
<%
i++;
}
mysql.closestmt();
mysql.closeconn();
mysql.closers();
rs.close();
%>
这个是我第一次连数据库,查询myblog表里的所有数据,并通过超连接传递参数ID在showblog.jsp里显示所点击的数据
(showblog.jsp代码)

<jsp:useBean id= "mysql " scope= "page " class= "myblog.MyDataSource "> </jsp:useBean>
<% String ID=null;
String time=null;
ID=request.getParameter( "ID ");
String sql= "select * from myblog where msgID= ' "+ID+ " ' ";
ResultSet rs =mysql.query(sql);
rs.previous();
if(rs!=null)
{%>
<%=rs.getString( "msgID ")%>
<%
return;
}
%>
通过以上语句理论上应该是输出msgID的值,rs数据集不为空
但却出现以下错误
org.apache.jasper.JasperException: Exception in JSP: /Showblog.jsp:85

82: rs.previous();
83: if(rs!=null)
84: {%>


85: <%=rs.getString( "msgID ")%>
86: <%
87: return;
88: }


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

root cause

javax.servlet.ServletException: Before start of result set

以下是我连接mysql的javabean

package myblog;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLData;
import java.sql.*;

public class MyDataSource
{
private Connection connection=null;
private Statement statement=null;
private ResultSet rs=null;
public MyDataSource() throws SQLException{
try
{
String driverName= "com.mysql.jdbc.Driver ";
String userName= "root ";//数据库用户名
String userPasswd= " ";//密码
String dbName= "myblog ";//数据库名
String tableName= "myblog ";//表名
String url= "jdbc:mysql://localhost/ "+dbName+ "?user=root&password= "+userPasswd; //联结字符串
Class.forName( "org.gjt.mm.mysql.Driver ").newInstance();
connection=java.sql.DriverManager.getConnection(url);
}
catch(java.lang.ClassNotFoundException cex)
{
throw new SQLException(cex.getMessage());
}
catch(java.lang.InstantiationException iex)
{


throw new SQLException(iex.getMessage());
}
catch(java.lang.IllegalAccessException iiex)
{
throw new SQLException(iiex.getMessage());
}
}
public ResultSet query(String sql)
{
try{
statement = connection.createStatement();
rs = statement.executeQuery(sql);
return rs;
}
catch(SQLException ex)
{
System.err.println(ex.getMessage());
}
return null;
}
//-----------数据库修改---------
public void update(String sql)
{
try{
statement=connection.createStatement();
statement.executeUpdate(sql);}
catch(SQLException ex) {System.err.println( "update(): "+ex.getMessage
());}
}
//----------关闭数据源-------
public void closestmt()
{
if(statement!=null)
{
try{statement.close();}
catch(SQLException ex) {System.err.println( "closestmt(): "+ex.getMessage());}}
}
//----------关闭链接---------
public void closeconn()
{
if(connection!=null)
{
try{connection.close();}
catch(SQLException ex) {System.err.println( "closeconn() "+ex.getMessage
());}}
}
public void closers()
{
if(rs!=null)
{
try{rs.close();}
catch(SQLException ex) {System.err.println( "closers() "+ex.getMessage
());}}
}
}

通过上网查询,可能是数据连接没有及时的释放的问题,或Mysql的最大连接数太小,可是我只查询了几次而已,而且没次用完rs数据集后我都调用了closeconn等释放资源函数,望大家帮帮我.



[解决办法]
rs.previous();
===》
rs.next();
[解决办法]
ResultSet rs =mysql.query(sql);
rs.previous();
if(rs!=null)

改为:
ResultSet rs =mysql.query(sql);
if(rs.next())
[解决办法]
rs.previous();

这种方法不要使,你要使就使rs.next()方法,有些情况下数据库不支持rs.previous()简单的说就是不支持流标回滚

关键看报错信息在指向什么地方

读书人网 >Java Web开发

热点推荐