站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题jsp中javabean访问数据库,允许jsp是出错了,大虾帮忙啊!

jsp中javabean访问数据库,允许jsp是出错了,大虾帮忙啊!

摘要: jsp中javabean访问数据库,允许jsp是出错了,大虾帮忙啊!


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.*"%>


<head>test db connect</head>
<body bgcolor="#FFFFFF">

<table width="60%" border="1">
<tr bgcolor="#CCCCFF">
<td width="50%">
姓名

</td>
<td width="25%">
性别

</td>
<td width="25%">
分数

</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">
<%=studentName%>

</td>
<td width="25%" bgcolor="#FFFFFF">
<%=studentSex%>

</td>
<td width="25%" bgcolor="#FFFFFF">
<%=studentScore%>

</td>
</tr>
<%
}
RS_result.close();
%>
</table>

</body>


在浏览器中输入http://localhost:8080/myjsp/conn_db.jsp出现如下错误信息:(myjsp为tomcat的虚拟目录)

type Exception report

message

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都没出问题啊,怎么就这个有问题?


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


空指针错误,初学者最容易犯的错误 ... 在代码里要进行错误捕捉


列名不匹配吧。


数据库里都有数据啊.
你们说的空指针错误是怎么回事?


就是说,访问的过程中,某个地方出现了空值,连接不上数据库,或数据库访问不正常,或查询错误,都会出现这样的结果。当出现这样的情况,程序继续对数据进行操作,很显然返回的就是空,这种情况是不允许的,除非特别这样。

其实你不用读列名,用 getString(列号)就可以,getInt();等等,参数是,结果集的列号,把数据的类型搞对,就可以访问了。

比如某个 结果集 list
list.getResult() 就是取这个结果集
list.getResult().getString(2),取该结果集 当前记录行的 第 2 列的String 类型的值。

访问结果集的数据,先进行定位。用 next();或其他方法定位到对应的行,才能 进行读取当前的数据。 数据库查询的返回后的结果集,其访问指针,指向第一行的前面,即,需要 next(),才能把指针指向第一行,这样才能取值。如果直接访问的话,这个时候,“指针”正指向结果集的前面,当然会出现 空值 的错误提醒,因为这个时候的指针是没有意义的,只有下移后,指向第一行才有意义。


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


你的类名为什么不大写呢??


建好数据源了吗??


把你的数据库中的表结构贴出来!!


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



我已经检查了N遍啊,怎么就是不行?


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


感谢楼上的提示但不是用户和密码的问题


有谁能帮我真正解决这个问题啊?谢谢了
在线等啊


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


不是那个原因


谁能帮忙调试一下吗?


在我的上面没有问题!!!


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


结果如下:你的qq是多少!发给你看看!


lz怎么不说话??


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



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


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


↑返回目录
前一篇: 请问这样的select语句对吗?
后一篇: jsp调用javabean连接数据库的问题?