注册 登录
编程论坛 J2EE论坛

一个数据库连接问题

寂寞天涯人 发布于 2006-11-21 20:15, 1391 次点击

数据库;连接代码如下,是 ACESS的
package conn;
import java.sql.*;
public class connDb{
public static String prox="sun.jdbc.odbc.JdbcOdbcDriver";
public static Connection con;

public static String pname="jdbc:odbc:book";
public connDb(){
}

public static Connection getConnection(){
try{
Class.forName(prox);
con=DriverManager.getConnection(pname);

}catch(ClassNotFoundException e){
System.out.println(e.getMessage());
}catch(SQLException e){
System.out.println(e.getMessage());
}
if(con==null){
System.out.println("没有获得数据库连接");
}

return con;

}
public static ResultSet executeQuery(String sql){//查询
con=connDb.getConnection();
ResultSet rs=null;
try{

Statement stmt=con.createStatement();

rs=stmt.executeQuery(sql);

}catch(SQLException e){}
return rs;
}


public static boolean uptate(String sql){//删除,更新

boolean b=false;
Connection con=null;
PreparedStatement ps=null;
try{
con=connDb.getConnection();
ps=con.prepareStatement(sql);
if(ps.executeUpdate()>0){
b=true;

}else{
b=false;
}

}catch(SQLException e){
b=false;
e.printStackTrace();
}finally{
System.out.println(ps+"DataBase.delete()"+sql);
try{
if(ps!=null){
ps.close();
}
}catch(SQLException e){
ps=null;
}
try{
if(con!=null){
con.close();
}
}catch(SQLException e){
con=null;
}

}
return b;
}
}

jsp文件如下
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<%@ page import="conn.connDb"%>
<jsp:useBean id="con" class="conn.connDb" scope="session"/>
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
%>
<%
String sql="select * from main order by id desc";

ResultSet rs=con.executeQuery(sql);
try{
while(rs.next()){%>
<%=rs.getString("content")%>
<%
}
}catch(SQLException e){out.println("错误");}

%>
<body>
</body>
</html>
出现的异常如下:
org.apache.jasper.JasperException: An exception occurred processing JSP page /web/index.jsp at line 18
15: <%
16: String sql="select * from main order by id desc";
17:
18: ResultSet rs=con.executeQuery(sql);
19: try{
20: while(rs.next()){%>
21: <%=rs.getString("content")%>
不知道怎么弄,一天了,还不行,请帮忙看下,要怎么解决,谢了

31 回复
#2
千里冰封2006-11-21 20:29
要懂得调试程序,先确定用户名密码是否正确
能否得到连接
然后再看你的SQL语句是否正确
一步一步看,就知道哪一步出问题了,就好解决了
#3
千里冰封2006-11-21 20:29
要懂得调试程序,先确定用户名密码是否正确
能否得到连接
然后再看你的SQL语句是否正确
一步一步看,就知道哪一步出问题了,就好解决了
#4
lewis03232006-11-21 20:40
你的 Connection 似乎在这个 connDb(你自己导入的类中) 你要先调用那里面的方法在这个页面中得到Connection对象 不知道说的对不对
但是知道
ResultSet rs=con.executeQuery(sql);

你这句有问题
#5
lewis03232006-11-21 20:42
<jsp:useBean id="con" class="conn.connDb" scope="session"/>
有这种用法的吗?以前一直没遇到过 如果可以的话 那就不是我说的问题了
#6
寂寞天涯人2006-11-21 20:47
以下是引用千里冰封在2006-11-21 20:29:28的发言:
要懂得调试程序,先确定用户名密码是否正确
能否得到连接
然后再看你的SQL语句是否正确
一步一步看,就知道哪一步出问题了,就好解决了

我用JAVA程序测试的时候是可以的

#7
千里冰封2006-11-21 20:50
调试可以,那就可以排除程序的问题,再看看你的JSP文件就可以
还有,要看看你的详细错误信息
#8
寂寞天涯人2006-11-21 20:50
以下是引用lewis0323在2006-11-21 20:40:54的发言:
你的 Connection 似乎在这个 connDb(你自己导入的类中) 你要先调用那里面的方法在这个页面中得到Connection对象 不知道说的对不对
但是知道
ResultSet rs=con.executeQuery(sql);

你这句有问题

是在那里,但是我调用那个方法也不行的
应该是ResultSet rs=con.executeQuery(sql);这个错误,不知道怎么改了,郁闷很久了,这个要怎么写啊

#9
寂寞天涯人2006-11-21 20:53
以下是引用lewis0323在2006-11-21 20:42:55的发言:
<jsp:useBean id="con" class="conn.connDb" scope="session"/>
有这种用法的吗?以前一直没遇到过 如果可以的话 那就不是我说的问题了

这样可以的,书上都这么写的,

#10
千里冰封2006-11-21 20:57
你能保证你的Connection能得到吗?
#11
千里冰封2006-11-21 21:00
还有,你看看你的日志里面你System.out打印出的内容就知道 了
#12
寂寞天涯人2006-11-21 21:01
以下是引用千里冰封在2006-11-21 20:50:01的发言:
调试可以,那就可以排除程序的问题,再看看你的JSP文件就可以
还有,要看看你的详细错误信息

jsp文件已经放上面了,帮忙看下,我实在没办法了,快要做毕业设计了,这状态让人着急死了
错误信息都在这里了
type Exception report

message

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 /web/index.jsp at line 18
15: <%
16: String sql="select * from main order by id desc";
17:
18: ResultSet rs=con.executeQuery(sql);
19: try{
20: while(rs.next()){%>
21: <%=rs.getString("content")%>

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:555)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause

java.lang.NullPointerException
conn.connDb.executeQuery(connDb.java:36)
org.apache.jsp.web.index_jsp._jspService(index_jsp.java:83)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.2 logs.
一定帮我看看 啊
是不是javabean 写错了,还是JSP错误
谢谢

#13
千里冰封2006-11-21 21:03
java.lang.NullPointerException
conn.connDb.executeQuery(connDb.java:36)

这句是最关键的异常
空指针异常
在你的这个方法内,所以说,你的Connection是不是没有得到
你在得到Connection的时候,把它打印出来看一下

目前分析,是你的Connection为null
你的getConnection方法有错
看看你的程序36行是哪一句?
#14
寂寞天涯人2006-11-21 21:06
以下是引用千里冰封在2006-11-21 21:00:56的发言:
还有,你看看你的日志里面你System.out打印出的内容就知道 了
日志里有这个
General error
没有获得数据库连接
General error
没有获得数据库连接
怎么改正啊
#15
千里冰封2006-11-21 21:09
说明你的数据库连接没有得到啊
是不是用户名密码输错了

#16
lewis03232006-11-21 21:10
试试
Connection con=connDb.getConnection();
ResultSet rs=con.executeQuery(sql);
#17
千里冰封2006-11-21 21:11

你的所有异常都出在这里
你想想看,你返回一个null,那当然要出问题了

目前先解决这个问题,把数据库的连接得到
可能如下:
1,你的数据源设错了
2,你需要用户名密码,可是你的程序里面却没有

#18
寂寞天涯人2006-11-21 21:14

我的数据库的用户名和密码多是空的。

#19
千里冰封2006-11-21 21:19

一定是哪个环节出错了
你的数据源设置的时候有没有加密码?
只要你的Connection能得到,就不会出这些错误了

多试几种可能性,一定会找到答案的

#20
寂寞天涯人2006-11-21 21:24
数据源那里应该没错的,因为我用JAVA代码测试过,
我也不知道connection那里为什么得不到连接。
#21
千里冰封2006-11-21 21:26
你用什么JAVA代码测试过

你那个JAVA代码能得到连接,这个JAVA代码不可能得不到连接

你自己要反省一下
#22
寂寞天涯人2006-11-21 21:43

就是用这个
public static void main(String[] args){

connDb c=new connDb();

String s="select * from main order by id desc";
try{

c.executeQuery(s);
while(rs.next()){
System.out.println(rs.getString("content"));
}
}catch(SQLException e){
System.out.println(e.getMessage());
}


}

#23
千里冰封2006-11-21 21:48
还有一种可能
环境变量的设置

有没有设好
在NB里面,环境变量是不需要你设的,但是出了NB,就要设一些了
#24
寂寞天涯人2006-11-21 21:58
我设置了些
CATALINA_BASE=%CATALINA_HOME%
CATALINA_HOME=C:\Tomcat 6.0
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\mssqlserver.jar;%CATALINA_HOME%\common\lib\servlet-api.jar;TOMCAT_HOME\common\lib\servlet-api.jar
JAVA_HOME=C:\jdk1.5.0_07
就这些了,还需要设置哪些吗,帮我看看
#25
千里冰封2006-11-21 22:07
少了rt.jar
#26
千里冰封2006-11-21 22:08

还有,你用的是什么版本的JDK啊,怎么还会有dt.jar?

#27
寂寞天涯人2006-11-21 22:34

是1.5的
那要改成什么呢?

#28
千里冰封2006-11-21 22:44
rt.jar
#29
寂寞天涯人2006-11-22 11:36

可是我里面确实是dt.jar啊?没有rt.jar

#30
千里冰封2006-11-22 12:53
C:\Program Files\Java\jdk1.5.0_07\jre\lib

这是我电脑上的目录,你自己对比着找
你那个dt.jar是在C:\Program Files\Java\jdk1.5.0_07\lib里面
但是我们需要的是jre\lib下面的jar文件
#31
寂寞天涯人2006-11-26 12:05
加了,还是不行啊。
#32
不耻下問2006-11-27 01:24
你的连接数据库有问题.

con=DriverManager.getConnection(pname);

括号里面应该是(连接字,数据库用户名,数据库密码)

这样才能连接!
1