2013-03-02 110 views
1

我在學習Android和Servlet編程,並且無法連接到本地mySQL數據庫。我有一個簡單的Android客戶端,它對本地主機託管的servlet執行HTTPpost請求。該請求似乎工作正常,但該servlet無法爲數據庫查找驅動程序。我很確定mysql的url是正確的,所以我猜測它的Driver是這個問題!SQLException - JDBC驅動程序和Tomcat

這是工具類,它應該得到的連接到數據庫:

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! 

回答

2

你必須試圖獲得連接

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

感謝隊友之前註冊您的驅動程序類,即整理出該異常!簡直不敢相信我沒注意到。但現在得到新的錯誤(編輯原來的帖子,新的錯誤) – MathanMV 2013-03-03 00:05:59

+0

這是因爲你的屬性被稱爲'驅動程序',但你試圖用鍵'dbDriver'得到它你需要在屬性中使用鍵的名稱文件。 – 2013-03-03 00:44:37

+0

進行了更改並仍然得到例外。試圖直接把字符串作爲參數,並且仍然有同樣的錯誤。 – MathanMV 2013-03-03 01:00:01