请教各位大侠,我已经弄了两天了,实在不知道为什么,页面结果怎么是NULL,下面是我的数据库连接Bean文件DatabaseCon.java源代码和测试数据库连接Bean的JSp文件testBean.jsp.
   DatabaseCon.java的源代码如下:
package bookshop;
import java.io.*;
import java.sql.*;
public class DatabaseCon
{
  public Connection con;
   public String URL="jdbc:odbc:mybooks";
   public String Message;
   public boolean connection(){
      try{
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         }
      catch(ClassNotFoundException ex){
      Message=ex.getMessage();
      System.exit(-1);
      }
      try{
      con=DriverManager.getConnection(URL,"sa","");
      return true;
      }
      catch(SQLException ex){
        Message=ex.getMessage();
        return false;
      }
   }
   public boolean close()
   {
     try{
          con.close();
          return true;
         }
     catch(Exception ex){
         Message=ex.getMessage();
         return false;
     }
   }
   public ResultSet exeSQL(String sqlstr)
   { 
    try{connection();
        Statement stmt=con.createStatement();
        ResultSet rs=stmt.executeQuery(sqlstr);
        return rs;
       }
    catch(Exception ex)
     {Message=ex.getMessage();}
     return null;
    }
    public String getString(ResultSet rs,String str)
    { try{
          return rs.getString(str);
         }
       catch(Exception ex)
       {Message=ex.getMessage();}
        return null;
     }
}
   
  测试数据库连接Bean的JSP文件testBean.jsp如下:
<%@ page contentType="text/html; charset=gb2312" import="java.sql.*" %>
<html>
   <head>
   <title>测试数据库连接Bean</title>
   </head>
      <jsp:useBean id="dbBean" scope="session" class="bookshop.DatabaseCon" />
   <body bgcolor="#ffffff">
   <% 
      ResultSet rs=dbBean.exeSQL("select * from bookinfo");
      String str;
      try{
          while(rs.next()) {
            str=dbBean.getString(rs,"PUBLISHER");
   %>
      [<%=dbBean.getString(rs,"TITLE")%>] -> <%=str%><br>
   <%
            }}catch(Exception ex)
           {out.print(ex.getMessage());}
    %>
    </body>
</html>
运行结果是:null
  我已经弄了两天了,实在不知道怎么回事,我简单的测试数据库连接时是成功的,可不知道为什么这样就不行,请教各位大侠,帮忙,感激不尽!

解决方案 »

  1.   

    搂住这个数据库连接的类是作为一个bean?
    怎么没看到无参构造方法,以及一些getter/setter
    楼主认为connection/close这些方法会启动调用?你这个设计就有问题
    根本不需要usebean,你要测试的话直接在jsp里面<% %>里面写代码好了
      

  2.   

    在jsp页面中直接实例化一个DatabaseCon,
    进行操作试试
      

  3.   

    没有调用connection()方法<%@ page contentType="text/html; charset=gb2312" import="java.sql.*" %> 
    <html> 
        <head> 
        <title>测试数据库连接Bean </title> 
        </head> 
           <jsp:useBean id="dbBean" scope="session"  class="bookshop.DatabaseCon" /> 
        <body bgcolor="#ffffff"> 
        <%  
          if(dbBean.connect())
    {
          ResultSet rs=dbBean.exeSQL("select * from bookinfo"); 
          String str; 
          try{ 
              while(rs.next()) { 
                str=dbBean.getString(rs,"PUBLISHER"); 
       %> 
          [ <%=dbBean.getString(rs,"TITLE")%>] ->  <%=str%> <br> 
        <% 
                }}catch(Exception ex) 
               {out.print(ex.getMessage());} 
    }else
    {
    out.println("连接数据库出错!");
    }
        %> 
         </body> 
    </html> 
      

  4.   

    你可能是取值的时候出来了,你没有打印出来你在那些try{}的catch()模块里把异常信息打印出来
    ex.printStackTrace();
      

  5.   

    exeSQL(String sqlstr) 函数被你写成return null啦
      

  6.   

     try{ 
              while(rs.next()) { 
                str=dbBean.getString(rs,"PUBLISHER"); 
       %> 
          [ <%=dbBean.getString(rs,"TITLE")%>] ->  <%=str%> <br> 
        <% 
                }}catch(Exception ex) 
               {out.print(ex.getMessage());} 
        %> 
         </body> 
    估计是上面那几个位置的问题。
    因为 rs.next() ;这个结果集是有移动的。
    你把他传到 dbBean里面去了。 可能这个结果集被你重新next()几次。因为传得是引用所以rs本身已经移动。
    你在页面上的while(rs.next())将不会出现你想要的 结果。
    如果需要直接  str = rs.getString(....); 就可以了。最好不要让 dbBean 去修改rs.
      

  7.   

    还是不行啊,请教具体怎么改啊?运行结果还是null
      

  8.   


               str=rs.getString("TITLE");        
       改成这样还是不行啊
      请教,具体该怎么做啊?实在不知道怎么弄了?
      

  9.   

    exeSQL(String sqlstr) 函数被你写成return null啦 
    请教!我也觉得是这个问题,可不知道具体怎么改,已经改了n次了,还是不行
      

  10.   

    小点意见:
    1.看不到 get/set 方法;
    2.连接数据库,代码要--精简;
    3.您的思路还不是很清晰:
    4.我个人觉得应该这样好点:
      首先,建一个BookBean 的实体,里面有get/set 方法;
      然后,建一个方法为 Bean 赋值:
    public void getBookBean(){
    try{
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         Connection con=DriverManager.getConenction("jdbc:odbc:bookinfo","sa","");
         Statement st=con.createStatement();
         Resultset rs=st.excuteQuery("select * from bookinfo");     while(){
                BookBean bkBean=new BookBean();
                bkBean.setPublisher(rs.getString("PUBLISHER"));
         }
         
       }catch(Exception ex){
          System.out.println("====getBookBean() 方法中,连接数据库出错!!!!====");
       }
    }   最后,在 jsp 中导入方法 getBookBean()的包,
        使用实例化:  <jsp:useBean id="dbBean" scope="session" class="bookshop.DatabaseCon" />,
        调用这个方法:  <%bkBean.getBookBean()%>
       使用JSP标准动作:
        <jsp:useBean id="bkBean" scope="session" class="bookshop.BookBean" />
        得到BookBean 中的值为: <jsp:getPropertity name="bkBean" propertity="publisher"/>5.想了解更多,多就看下 MVC 模式吧!!!
      

  11.   

    是在执行exeSql这个方法发生了异常了,你没有打印异常直接return null,这样页面结果当然为null了,你把异常打印出来看看吧