我是一个JSP初学者,发现连接数据库的步骤是按部就班,连接同一个数据库的话,代码是完全一样的,对于不同的JSP页面,不同的是执行的SQL语句和按照返回的结果而进行的操作。所以我想能不能把JSP中连接数据库的代码给封装成javabean,在做新的JSP页面时,直接导入javabean就可以了?javabean我是这样做的import java.sql.*;
public class access_database
{
       Connection con;
       Statement stmt;
       ResultSet rs;
    public Statement connect_database()
    {
          try
          {
              Class.forName("com.mysql.jdbc.Driver");
              DriverManager.registerDriver(new com.mysql.jdbc.Driver());
              String dbUrl ="jdbc:mysql://192.168.1.240:3306/project_1";
              String dbUser="root";
              String dbPwd="1234";
              con = java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
              stmt = con.createStatement();
          }catch(Exception e){System.out.println(e.getMessage());}
          return stmt;
    }
    public void disconnect_database()
    {
        try
        {
        rs.close();
        stmt.close();
        con.close();
        }catch(Exception e){System.out.println(e.getMessage());}
    }    /*public Connection return_con()
    {
        return con;
    }*/}然后JSP我是这样写的<jsp:useBean id = "data" class = "javabean1.access_database" scope="page">
    <jsp:setProperty name="data" property = "*"/>
</jsp:useBean>
<%@page import = "java.sql.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%><html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>登录信息</title>
    </head>
    <body>
          <%
              Connection con;
              Statement stmt;
              ResultSet rs;
              stmt= data.connect_database();
              //这个地方我直接调用javabean的成员方法,得到stmt对象,我认为连接数据库就是完成得到stmt对象
              rs = stmt.executeQuery("select * from Tab1");
              //执行一句简单的SQL语句
          %>
            <table border="1" width=600>
            <tr>
            <td bgcolor="#D8E4F1"><b> a </b></td>
            <td bgcolor="#D8E4F1"><b> b </b></td>
            <td bgcolor="#D8E4F1"><b> c </b></td>
            <td bgcolor="#D8E4F1"><b> d </b></td>
            <td bgcolor="#D8E4F1"><b> e </b></td>
            <td bgcolor="#D8E4F1"><b> f </b></td>
            </tr>
            <%
            while(rs.next()){
              String a=rs.getString(1);
              String b=rs.getString(2);
              String c=rs.getString(3);
              String d=rs.getString(4);
              String e=rs.getString(5);
              String f=rs.getString(6);
            %>
            <tr>
            <td><%= a %></td>
            <td><%= b %></td>
            <td><%= c %></td>
            <td><%= d %></td>
            <td><%= e %></td>
            <td><%= f %></td>
            </tr>
            <%}%>
            </table>
            <%
            data.disconnect_database();//还是得关闭数据库连接
            %>
    </body>
</html>
运行后,报错:
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: An exception occurred processing JSP page /frame/web pages/middle_login_info1.jsp at line 1815:               Statement stmt;
16:               ResultSet rs;
17:               stmt= data.connect_database();
18:               rs = stmt.executeQuery("select * from TabMailLoginAll");
19:           %>
20:             <table border="1" width=600>
21:             <tr>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause java.lang.NullPointerException
org.apache.jsp.frame.web_0020pages.middle_005flogin_005finfo1_jsp._jspService(middle_005flogin_005finfo1_jsp.java:82)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.
--------------------------------------------------------------------------------
由于本人天性愚钝,而且是初学,很多不懂,所以希望大家能够不吝赐教,同时讲解详细点!我怀疑是不是我硬生生把连接数据库的代码给分成两段,这样不行?

解决方案 »

  1.   

    用.properties来配置连接
    #//oracle
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();  
    OraclUrl="jdbc:oracle:thin:@localhost:1521:orcl"; 
    OraclUser="test";  
    OraclPassword="test";  
    Connection conn= DriverManager.getConnection(url,user,password);
    #//sqlserver
    #Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
    #sqlserverurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";  
    #sqlserveruser="sa";  
    #sqlserverpassword="";  
    #Connection conn= DriverManager.getConnection(url,user,password);  
    前面有#号的说明是注释。想要哪种连接就去掉#就行了。
      

  2.   

     LZ 真悲剧啊,你在JSP页面还用小脚本写咯,那样你这页面后面还好维护吗,何不把要实现的代码块写在类里面,在JSP页面上用JSTL调用呢,对于上述问题也许是作用范围小了把scope="page"改成request试试咯..
      

  3.   

    唉,看到JSP页面里面写代码就头疼。建议LZ用EL表达式+JSTL标签
      

  4.   

    页面和java代码最好分开写方便管理