当前页面: 开发资料首页 → 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。
有谁能告诉我是为什么吗?