首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

jsp连mysql上的迷惑

2011-12-08 
jsp连mysql上的困惑小弟刚开始学习Jsp不久,在连mysql数据库时遇到太多问题了,望大家能帮帮我.调用几次连接

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()简单的说就是不支持流标回滚

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

热点排行