我做了一个JSP页面,里面有连接数据库的语句,也有列出数据的语句,能实现,也好使了!
但我现在想把连接数据库及列数据的语句做成JAVABEAN,在JSP页面中调这个BEAN,可是运行就出错。请指点。
这个是BEAN
package news;
import java.sql.*;
public class sql_data
{
String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
String user="sa";
String password="396330100";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
public sql_data()
{
try
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("sql_data()" + e.getMessage());
}
}
public void executeInsert(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executeUpdate:"+ex.getMessage());
}
}
public ResultSet executeQuery(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("sql_data.executeQuery:"+ex.getMessage());
}
return rs;
}
public void executeUpdate(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery"+ex.getMessage());
}
}
public void executeDelete(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executeDelete:"+ex.getMessage());
}
}
public void closestmt()
{
try
{
stmt.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
public void closeConn()
{
try
{
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
下面是JSP页面<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<jsp:useBean id="sqlbean" class="news.sql_data"/>
       <html>
       <body>
       <% //Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
          //String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
         // pubs 为你的数据库的
         //String user="sa";
          //String password="396330100";
  //Connection conn= DriverManager.getConnection(url,user,password);
 //Statement stmt=conn.createStatement
 //(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
          String sql="select a21,a1,a2,a8,a9,a13 from gb";
          ResultSet rs=null;
           rs=sqlbean.executeQuery(sql);
          while(rs.next()) { %>
_______________________________________________________<br>
                <%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
<% } %>
       <% out.print("数据库操作成功,恭喜你556677"); %>
       

       <% 
          //rs.close();
          //stmt.close();
          //conn.close();
       %>
       </body>
       </html>

解决方案 »

  1.   

    初错提示,我也贴出来:
    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root cause java.lang.NullPointerException
    org.apache.jsp.sql_005ftest_jsp._jspService(org.apache.jsp.sql_005ftest_jsp:72)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs
      

  2.   

    try:在rs=sqlbean.executeQuery(sql);
    前调用你的数据库驱动加载方法:sql_data()也就是:
    String sql="select a21,a1,a2,a8,a9,a13 from gb";
    ResultSet rs=null;
    sql_data();
    rs=sqlbean.executeQuery(sql);
      

  3.   

    javabean不是你这样用的,要这样用<jsp:useBean  id=” Java Bean的名字” class=”创建Java Bean的类” scope=” Java Bean的作用域” / >
      

  4.   

    不过你为啥不把  <% //Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
              //String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
             // pubs 为你的数据库的
             //String user="sa";
              //String password="396330100";
      //Connection conn= DriverManager.getConnection(url,user,password);
     //Statement stmt=conn.createStatement
     //(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
              String sql="select a21,a1,a2,a8,a9,a13 from gb";
              ResultSet rs=null;
               rs=sqlbean.executeQuery(sql);
              while(rs.next()) { %>
    _______________________________________________________<br>
                    <%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
    <% } %>
           <% out.print("数据库操作成功,恭喜你556677"); %>
           

           <% 
              //rs.close();
              //stmt.close();
              //conn.close();
           %>
    这一部分也放到java类中?
      

  5.   

    kingxin130() 正解,没加载驱动
      

  6.   

    我学JSP毕业后,连去做网站都没有人要,只好去跟外国人混erp二次开发了。真惨!
      

  7.   

    kingxin130() ( ) 信誉:100    Blog  2006-09-02 10:38:00  得分: 0  
     
     
       try:在rs=sqlbean.executeQuery(sql);
    前调用你的数据库驱动加载方法:sql_data()也就是:
    String sql="select a21,a1,a2,a8,a9,a13 from gb";
    ResultSet rs=null;
    sql_data();
    rs=sqlbean.executeQuery(sql);
      
     
    sql_data()
    它不是个构造方法吗?也需要执行吗?我是初学,请指点!
      

  8.   

    大哥,还是不对啊,出错提示变了:
    org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 8 in the jsp file: /sql_test.jsp
    Generated servlet error:
    Syntax error, insert ";" to complete Statement
      

  9.   

    org.apache.jasper.JasperException: Unable to compile class for JSP //jsp编译出错
    An error occurred at line: 8 in the jsp file: /sql_test.jsp    //第8行有问题
    Generated servlet error:
    Syntax error, insert ";" to complete Statement   //缺少";"
      

  10.   

    看你贴出来的代码 在叶面上好像没有调用bean 呢
      

  11.   

    不对啊,大哥
    org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 8 in the jsp file: /sql_test.jsp
    Generated servlet error:
    The method sql_data() is undefined for the type sql_data我加上分号了,就提法没有找到这个方法?
    我写sqlbean.之后也没有提示我有这个方法啊?
      

  12.   

    javabean用的不多,我的用法是:
    bean里全是些setXXX()和getXXX()方法jsp页面就可以使用< %= beanName.getXXX() %>方法
    以及< % beanName.setXXX(xx xx) %>方法你上面的用法感觉就是调用一个普通的java类
    如果不想改java类
    可以把jsp页面中的<jsp:useBean id="sqlbean" class="news.sql_data"/>
    一行改成:
    <%@page import="news.sql_data"%>
    然后用sql_data sd = new sql_data();
    语句来加载驱动String sql="select a21,a1,a2,a8,a9,a13 from gb";
    ResultSet rs=null;
    rs=sd.executeQuery(sql);
    while(rs.next()) { %>
    ...
      

  13.   

    <jsp:useBean id="sqlbean" class="news.sql_data"/>这句不就是调用BEAN吗?能帮忙测试一下我的代码,我的代码都是完整的代码谢谢了!
      

  14.   

    TO :kingxin130() ( ) 
    用你的方法也不行啊
    org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 10 in the jsp file: /sql_test.jsp
    Generated servlet error:
    sd cannot be resolvedAn error occurred at line: 10 in the jsp file: /sql_test.jsp
    Generated servlet error:
    sd cannot be resolved
      

  15.   

    sql_data sd = new sql_data();
    这句写了吗,写了就不应该
    "sd cannot be resolved"了
      

  16.   

    写了!!
    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ page language="java" import="java.sql.*"%>
    <%@ page language="java" import="java.util.*"%>
    <%@ page language="java" import="java.text.*"%>
    <%@ page language="java" import="news.sql_data"%>
    sql_data sd = new sql_data();       <html>
           <body>
           <% 
           //Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
              //String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
              //pubs 为你的数据库的
             //String user="sa";
              //String password="396330100";
      //Connection conn= DriverManager.getConnection(url,user,password);
     //Statement stmt=conn.createStatement
     //(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
              String sql="select a21,a1,a2,a8,a9,a13 from gb";
              ResultSet rs=null;
             sd.sql_data();
              rs=sd.executeQuery(sql);
              while(rs.next()) { %>
    _______________________________________________________<br>
                    <%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
    <% } %>
           <% out.print("数据库操作成功,恭喜你556677888"); %>
           

           <% 
              //rs.close();
              //stmt.close();
              //conn.close();
           %>
           </body>
           </html>
      

  17.   

    我把sql_data.class文件放到WEB-INF\classes\news 没有错吧?
      

  18.   

    我的想法是把 sql语句写到一个listBean.java里面 数据结果放到另外一个dataBean.java里面jsp界面只是给参数给listBean.java产生对,结果放到dataBean.java产生对象里面,然后jsp界面返回结果,这样容易管理 把所有的对数据库操作都放到java里面不知道有什么错误  望指出
      

  19.   

    handerz_cn() ( ) 信誉:100    Blog  2006-09-02 11:47:00  得分: 0  
     
     
       我的想法是把 sql语句写到一个listBean.java里面 数据结果放到另外一个dataBean.java里面jsp界面只是给参数给listBean.java产生对,结果放到dataBean.java产生对象里面,然后jsp界面返回结果,这样容易管理 把所有的对数据库操作都放到java里面不知道有什么错误  望指出
      
     
    大哥,也许你做的对,但对我来说挺难的,我也不会啊!我就想把目前的弄明白,一点点的学!
    我觉得我目前的这两个东西挺简单的,我也能理解,就是不好使?郁闷!!!
      

  20.   

    写了!!
    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ page language="java" import="java.sql.*"%>
    <%@ page language="java" import="java.util.*"%>
    <%@ page language="java" import="java.text.*"%>
    <%@ page language="java" import="news.sql_data"%>
    sql_data sd = new sql_data();       <html>
           <body>
           <% 
           //Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
              //String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
              //pubs 为你的数据库的
             //String user="sa";
              //String password="396330100";
      //Connection conn= DriverManager.getConnection(url,user,password);
     //Statement stmt=conn.createStatement
     //(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
              String sql="select a21,a1,a2,a8,a9,a13 from gb";
              ResultSet rs=null;
             sd.sql_data();
              rs=sd.executeQuery(sql);
              while(rs.next()) { %>
    _______________________________________________________<br>
                    <%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
    <% } %>
           <% out.print("数据库操作成功,恭喜你556677888"); %>
           

           <% 
              //rs.close();
              //stmt.close();
              //conn.close();
           %>
           </body>
           </html>sql_data sd = new sql_data();   是java代码,写到<% %>里试试
      

  21.   

    我学JSP毕业后,连去做网站都没有人要,只好去跟外国人混erp二次开发了。真惨!
    是不是哟,
    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ page language="java" import="java.sql.*"%>
    <%@ page language="java" import="java.util.*"%>
    <%@ page language="java" import="java.text.*"%>
    <jsp:useBean id="sqlbean" class="news.sql_data"/><%@ page language="java" import="news.*"%>
     不是用jsp:useBean 
      

  22.   

    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ page language="java" import="java.sql.*"%>
    <%@ page language="java" import="java.util.*"%>
    <%@ page language="java" import="java.text.*"%>
    <%@ page language="java" import="news.sql_data"%>
           <html>
           <body>
           <% 
              String sql="select a21,a1,a2,a8,a9,a13 from gb";
              ResultSet rs=null;
             //sd.sql_data();
             sql_data sd = new sql_data();
              rs=sd.executeQuery(sql);
              while(rs.next()) { %>
    _______________________________________________________<br>
                    <%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
    <% } %>
           <% out.print("数据库操作成功,恭喜你556677888"); %>
           </body>
           </html>
    还是不对啊org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root cause java.lang.NullPointerException
    org.apache.jsp.sql_005ftest_jsp._jspService(org.apache.jsp.sql_005ftest_jsp:62)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      

  23.   

    rs=sqlbean.executeQuery(sql);
              while(rs.next()) { %>while语句前要判断rs是否是null吧,改成while(rs!=null && rs.next())试试看
      

  24.   

    兄弟,我把你的代码copy过来。试了一下完全问题!!!
      

  25.   

    本人也是初学,调试了一下:
    <javabean中>
    String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";//目前我只用这方法连接,没有问题
    String url="jdbc:odbc:test";
    String user="sa";
    String password="sa";
    <jsp中><%@ page contentType="text/html;charset=gb2312" %>
    <%@ page language="java" import="java.sql.*"%>
    <%@ page language="java" import="java.util.*"%>
    <%@ page language="java" import="java.text.*"%><jsp:useBean id="sqlbean" class="qwe.sql_data" scope="page"/>//发现你1楼的里面scope没有写
    <html>
    <body>
    <% try
    {
    sqlbean.sql_data();
    String sql="select * from student";
    ResultSet rs=sqlbean.executeQuery(sql);
      
    while(rs.next()){ 
      out.println(rs.getInt(1));
      out.println(rs.getString(2));
      out.println(rs.getString(3));
      out.println(rs.getString(4));
    //注意与数据库类型相符}
    }catch(Exception ee)
    {}
    //rs.close();
    //stmt.close();
    //conn.close();
    %>
    </body>
    </html>自己测试了下成功显示的,SQL语句也没有问题。
    希望能帮你解决问题~!
      

  26.   

    请把tomcat work目录下sql_005ftest_jsp文件的第72行贴出来,还有,你的session或者request请求里面有sql_data的实例么???
    请不要把数据库连接与释放放到javabean里面去,在servlet的每个业务逻辑中请用一个connection,在业务结束的时候transaciton commit,finally里面connection close。
      

  27.   

    这样就是有可能你在页面上申请的rs对象由于你给它赋值为null,但是返回的纪录集对象也还是为null你却无条件使用了,所以就报出了空指针(java.lang.NullPointerException)的错误最好用调试工具进行调试
      

  28.   

    写一个非网页的应用程序测试吧:
    Test.java:
    package news;
    import java.sql.*;
    public Class Test{
      public static void main(String args[]){
         String strSQL=="select a21,a1,a2,a8,a9,a13 from gb";
         ResultSet rs=null;
         Sql_data sd = new Sql_data();
         rs=sd.executeQuery(strSQL);
         if(rs.next())  
             System.out.println("OK!");
    }
    }
    跑一下,看看哪里会出问题。
    另外,你的bean有一些问题,首先,Class的首字母最好大写:Sql_data;其次,executeQuery方法的返回值是ResultSet,但是在你的类中该方法实际上是对sql_data类的私有数据成员rs赋值!而你又不为它写getter方法,所以这样写根本没有用。直接把rs做成executeQuery()的局部变量好了