javabean代码:package student;
import java.sql.*;public class conn{
String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr="jdbc:odbc:student";
Connection connect=null;
ResultSet rs=null;
public conn(){
try{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e){
System.err.println(e.getMessage());
}
}
public ResultSet executeQuery(String sql){
try{
connect=DriverManager.getConnection(sConnStr);
Statement stmt=connect.createStatement();
rs=stmt.executeQuery(sql);
}
catch(SQLException ex){
System.err.println(ex.getMessage());
}
return rs;
}
}访问javabean的jsp源文件代码:
<%@page contentType="text/html;charset=GBK"%>
<%@page language="java" import="java.sql.*"%>
<jsp:useBean id="connDbBean" scope="page" class="student.conn"/>
<html>
  <head><title>test db connect</title></head>
<body bgcolor="#FFFFFF">
<div align="center">
   <table width="60%" border="1">
     <tr bgcolor="#CCCCFF">
       <td width="50%">
         <div align="center"><font color="#FF0033"><b>姓名</b></font></div>
       </td>
       <td width="25%">
         <div align="center"><font color="#FF0033"><b>性别</b></font></div>
       </td>
       <td width="25%">
         <div align="center"><font color="#FF0033"><b>分数</b></font></div>
       </td>
     </tr>
<%
ResultSet RS_result=connDbBean.executeQuery("select * from table1");
String studentName="";
String studentSex=""; 
int studentScore=0;
while(RS_result.next()){
     studentName=RS_result.getString("name");
     studentSex=RS_result.getString("sex");
     studentScore=RS_result.getInt("score");
%>
  <tr>
    <td width="50%" bgcolor="#FFFFFF">
      <div align="center"><%=studentName%></div>
    </td>
     <td width="25%" bgcolor="#FFFFFF">
      <div align="center"><%=studentSex%></div>
    </td>
     <td width="25%" bgcolor="#FFFFFF">
      <div align="center"><%=studentScore%></div>
    </td>
  </tr>
<%
}
RS_result.close();
%>  
</table>
</div>
</body>
</html>在浏览器中输入http://localhost:8080/myjsp/conn_db.jsp出现如下错误信息:(myjsp为tomcat的虚拟目录)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:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.NullPointerException
org.apache.jsp.conn_005fdb_jsp._jspService(conn_005fdb_jsp.java:75)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.大虾请帮帮忙看看怎么回事啊?我已经运行了好几个jsp调用javabean都没出问题啊,怎么就这个有问题?

解决方案 »

  1.   

    java.lang.NullPointerException 出现了空指针了
    确认一下数据库有没有数据.或者字段都有值.
    输出一下下面的变量是不是有值.
    studentName=RS_result.getString("name");
    studentSex=RS_result.getString("sex");
    studentScore=RS_result.getInt("score");
      

  2.   

    就是说,访问的过程中,某个地方出现了空值,连接不上数据库,或数据库访问不正常,或查询错误,都会出现这样的结果。当出现这样的情况,程序继续对数据进行操作,很显然返回的就是空,这种情况是不允许的,除非特别这样。其实你不用读列名,用 getString(列号)就可以,getInt();等等,参数是,结果集的列号,把数据的类型搞对,就可以访问了。比如某个 结果集  list
    list.getResult() 就是取这个结果集
    list.getResult().getString(2),取该结果集 当前记录行的 第 2 列的String 类型的值。访问结果集的数据,先进行定位。用 next();或其他方法定位到对应的行,才能 进行读取当前的数据。 数据库查询的返回后的结果集,其访问指针,指向第一行的前面,即,需要 next(),才能把指针指向第一行,这样才能取值。如果直接访问的话,这个时候,“指针”正指向结果集的前面,当然会出现 空值  的错误提醒,因为这个时候的指针是没有意义的,只有下移后,指向第一行才有意义。
      

  3.   

    我改成
         studentName=RS_result.getString(1);
         studentSex=RS_result.getString(2);
         studentScore=RS_result.getInt(3);
    还是一样的错误提示。
    数据库应该没有错,我编了个java程序对数据库进行读取和插入都能正常运行啊
      

  4.   

    不是因为类名没大写缘故吧?
    数据源建好了,表结构很简单:
    name text
    sex text
    score number
      

  5.   

    connect=DriverManager.getConnection(sConnStr);
    这里面不要数据源的用户和密码吗?
    connect=DriverManager.getConnection(sConnStr,?,?);
      

  6.   

    你的name字段好像是关键字,你改成别的试试!!
      

  7.   

    查看一下tomcat自动编译时生成的org.apache.jsp.conn_005fdb_jsp._jspService这个文件的第75行,看是哪个变量为空?
      

  8.   

    lz确认一下数据库那几条满足条件的数据name,sex,score是不是都有值啊
      

  9.   

    tomcat自动编译时生成的org.apache.jsp.conn_005fdb_jsp._jspService文件的第75行为
    while(RS_result.next())
      

  10.   

    晕倒啊  终于搞定了
    原来是odbc数据源除了问题,原来是系统dsn不是用户dsn。
    有谁能告诉我是为什么吗?