java - SQLException - JDBC 驱动程序和 Tomcat

标签 java mysql rest servlets

我正在尝试学习 Android 和 Servlet 编程,但在连接到本地 mySQL 数据库时遇到了问题。我有一个简单的 Android 客户端,它向托管在本地主机上的 servlet 发出 HTTPpost 请求。请求似乎工作正常,但 servlet 无法找到数据库的驱动程序。我很确定 mysql url 是正确的,所以我猜它是驱动程序的问题!

这是应该获取数据库连接的实用程序类:

public class Database {

private static Connection connection = null;

/**
 * 
 * @return
 */
public static Connection getConnection(){
    if(connection!=null){
        return connection;
    } else {
        try {
            Properties db_properties = new Properties();
            InputStream inStream = Database.class.getClassLoader().getResourceAsStream("/db.properties");
            db_properties.load(inStream);
            String dbDriver = db_properties.getProperty("dbDriver");
            String url = db_properties.getProperty("url");
            String dbUser = db_properties.getProperty("dbUser");
            String dbPass = db_properties.getProperty("dbPassword");
            connection = DriverManager.getConnection(url,dbUser,dbPass);
            Class.forName(dbDriver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    return connection;
}

这是以下数据库属性文件:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:8889/gymbuddy
user=Mathan
pass=PYCCmcPDAFSj7N9B

这是 servlet 设置的样子:

Servlet Setup

这是我得到的堆栈跟踪:

    java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:8889/gymbuddy?user=Mathan&password=PYCCmcPDAFSj7N9B
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at com.mathanv.gb.util.Database.getConnection(Database.java:36)
        at com.mathanv.gb.dao.BuddyDao.<init>(BuddyDao.java:35)
        at com.mathanv.gb.controller.BuddyController.<init>(BuddyController.java:29)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:357)
        at java.lang.Class.newInstance(Class.java:310)
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:138)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1137)
        at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:858)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at java.lang.Thread.run(Thread.java:680)
    Mar 2, 2013 11:50:53 PM org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet [BuddyController] in context with path [/gbserver] threw exception
    java.lang.NullPointerException
        at com.mathanv.gb.dao.BuddyDao.registerBuddy(BuddyDao.java:44)
        at com.mathanv.gb.controller.BuddyController.doPost(BuddyController.java:51)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at java.lang.Thread.run(Thread.java:680)

Help!

If you need any more information, let me know!

最佳答案

您必须在尝试建立连接之前注册您的驱动程序类

Class.forName(dbDriver); // before
connection = DriverManager.getConnection(url,dbUser,dbPass); //after

关于java - SQLException - JDBC 驱动程序和 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180829/

相关文章:

java - 在显示主窗口之前打开配置对话框?

MYSQL 需要 group by 但查询会产生错误的结果

javascript - 在 AngularJS REST 中使用 JSON

java - Tomcat : web application java class files/jar location

java - java的base64编码问题

Java 难题 - 尝试在单击按钮后处理 GUI

java - 找不到 'java.lang.StackTraceElement' 的转换器

php - 计算多个表中的行数

mysql - 列匹配的累积和

java - 关于@Controller @RestController 和@ResponseBody 的困惑