JDBC测试数据库连接成功,但在访问servlet时显示“注册驱动失败”

Mrs_Wu 2018-02-03 04:51:44
最近在写JAVA分页的一个demo时遇到的一个问题:
①在测试JDBC数据库连接时,显示测试成功。DBHelper类中连接数据库代码及测试结果如下:

package com.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.sql.*;

public class DBHelper {

private static String driver;
private static String url;
private static String username;
private static String password;
private PreparedStatement pstmt;//定义sql的执行对象
private ResultSet resultSet;//定义查询返回的结果集合
private static Connection conn;
public DBHelper(){};
static{
loadConfig();
}
//加载数据库配置信息
public static void loadConfig(){
try {
InputStream inStream=DBHelper.class.getResourceAsStream("/jdbc.properties");
Properties prop=new Properties();//创建一个Properties对象
prop.load(inStream);
driver=prop.getProperty("jdbc.driver");
username=prop.getProperty("jdbc.username");
password=prop.getProperty("jdbc.password");
url=prop.getProperty("jdbc.url");
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException("读取数据库配置文件异常!",e);
}
}

public static Connection getConnection(){
try {
Class.forName(driver);
conn=DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功");
} catch (Exception e) {
throw new RuntimeException("驱动注册失败!");
}
return conn;
}
public void releaseConn(){
if(resultSet!=null){
try{
resultSet.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
if(pstmt!=null){
try{
pstmt.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
public static void main(String args[]){
Connection conn=null;
conn=DBHelper.getConnection();
if(conn==null){
System.out.println("数据库连接失败");
}
if(conn!=null){
System.out.println("数据库连接成功");
}
}
}

(其中url,username,password都放在名为jdbc.properties的一个file中)
测试结果为:
数据库连接成功
数据库连接成功
②通过url访问servlet,出现如下的错误:

MyEclipse错误提示如下:
严重: Servlet.service() for servlet [test] in context with path [/ServletDemo] threw exception
java.lang.RuntimeException: 驱动注册失败!
at com.util.DBHelper.getConnection(DBHelper.java:49)
at dao.StudentDaoImpl.getAllStudent(StudentDaoImpl.java:36)
at dao.StudentDaoImpl.findStudent(StudentDaoImpl.java:15)
at service.StudentServiceImpl.findStudent(StudentServiceImpl.java:23)
at servlet.test.doPost(test.java:67)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2521)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2510)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
请问大家有遇到过类似的问题吗?求赐教,谢谢大家!
...全文
442 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
TxWang_ 2021-08-01
  • 打赏
  • 举报
回复

你好遇到了同样的问题,解决了吗

孟子E章 2018-02-04
  • 打赏
  • 举报
回复
检查jdbc.properties文件里面的配置是否正确,比如key/value必须采用=号,否则,端口没法写了。 另外注意是否有空格等字符,拼写是否正确
Mrs_Wu 2018-02-04
  • 打赏
  • 举报
回复
那它显示我连接成功,是不是就意味着我基本的配置信息等都没问题呢?

10,607

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧