2013-07-01 95 views
0

我想了解jsp頁面中的數據庫連接。這裏是我的代碼:無法連接到jsp數據庫

這是我的servlet:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 

    out.println("servlet"); 

    String username=request.getParameter("username"), password=request.getParameter("password"); 
    out.println("Username: "+username+" Password: "+password); 

    CheckUser(username,password); 
} 

protected void CheckUser(String username, String password) 
{ 
    dbConnect.connect(); 

} 

,這裏是我的數據庫連接類:

import java.sql.DriverManager; 

import com.mysql.jdbc.Connection; 


public class dbConnect { 

    static String dbUrl="jdbc:mysql://localhost:3306/Bank"; 
    String username="root"; 
    String password=""; 

    static Connection con=null; 

    public static void connect() 
    { 
     try { 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     con=(Connection) DriverManager.getConnection(dbUrl); 
     System.out.println("Connected!"); 

     } 
     catch (Exception e) { 

      System.out.println("not connected"); 

     } 
    } 

} 

的問題是,在connect()函數,當它涉及到的line Class.forName(「com.mysql.jdbc.Driver」)。newInstance();它會產生一個錯誤並進入catch塊。這裏有什麼不對?謝謝。我做了Nambari說的,現在我得到了行的錯誤con =(Connection)DriverManager.getConnection(dbUrl);這裏是例外:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ''@'localhost' to database 'bank' 
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 com.mysql.jdbc.Util.handleNewInstance(Util.java:353) 
at com.mysql.jdbc.Util.getInstance(Util.java:336) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2938) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:855) 
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3337) 
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1217) 
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1930) 
at com.mysql.jdbc.Connection.<init>(Connection.java:716) 
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) 
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 com.mysql.jdbc.Util.handleNewInstance(Util.java:353) 
at com.mysql.jdbc.Connection.getInstance(Connection.java:295) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) 
at java.sql.DriverManager.getConnection(DriverManager.java:582) 
at java.sql.DriverManager.getConnection(DriverManager.java:207) 
at dbConnect.connect(dbConnect.java:18) 
at loginServlet.CheckUser(loginServlet.java:41) 
at loginServlet.service(loginServlet.java:36) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Thread.java:662) 

未連接

+0

它拋出了什麼異常?在catch塊中添加e.printStackTrace() – user1573133

+0

什麼是「異常」類型?也許你忘了包含'mysql'庫。在更快速處理時,這是一個常見錯誤:-D –

+0

我不知道它在錯誤控制檯中未顯示的異常類型,它只是打印未連接。我怎麼能看到它? – yrazlik

回答

1

e.printStacktrace();替換爲您的天真System.out.println();以查看有關如何解決它們的錯誤和消息。順便說一句,看起來你錯過了數據庫連接jar(在這種情況下,jar連接到MySQL),這個jar和其他第三方庫應該在WEB-INF/lib目錄中。

對於第二個錯誤,您忘記使用您的userpassword變量。只需將其更改爲

con=(Connection) DriverManager.getConnection(dbUrl, user, password); 

請注意,如果您使用數據庫連接池,則可以擺脫所有這些問題。請參閱Is it a good idea to put jdbc connection code in servlet class?以瞭解處理數據庫連接的最佳方法。

1

的Class.forName( 「com.mysql.jdbc.Driver」)的newInstance();它會產生一個 錯誤並進入catch塊。

基於這些信息,我的猜測是你的mysql.jar不在運行時類路徑中。

+0

我去了properties> java build path> libraries並添加了jar文件。這不是我應該做的嗎? – yrazlik

+0

@bigO:爲構建(編譯時)添加jar,而不是運行時。對於運行時,將其添加到lib文件夾。 – kosa

+0

我做了你所說的感謝,但現在我在下一行中得到一個異常,你可以看到編輯過的部分? – yrazlik

1
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ''@'localhost' to database 'bank' 

表示連接到mysql的參數是錯誤的。請檢查userpassword,hostdriver參數。