2012-08-12 28 views
0

我有以下的Java類:我的JDBC連接可能有問題嗎?

package web; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import java.sql.*; 


public class HelloWorld extends HttpServlet { 
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException { 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    out.println("Student Name<br>"); 


try{ 
    Connection conn=null; 
     String url = "jdbc:mysql://localhost/test"; 
     PreparedStatement pre=null; 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     conn=DriverManager.getConnection(url,"root","3324911"); 
     out.println("Database connected"); 
     pre = conn.prepareStatement("Insert INTO countries(COUNTRY,COUNTRY_ISO_CODE,REGION) VALUES (?,?,?)"); 
     pre.setString(1,"USA"); 
     pre.setString(2,"US"); 
     pre.setString(3,"North America"); 
     pre.executeUpdate(); 

    }catch (Exception e){//Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 
} 
} 

無論出於何種原因,當我部署這個類在Tomcat中,該程序只能達到行

Class.forName("com.mysql.jdbc.Driver").newInstance(); 

它到達行後它會失敗:

conn=DriverManager.getConnection(url,"root","3324911"); 

這try/catch塊正在爲一個單獨的方法,我把它從一個主要方法從另一個類,它工作正常。

我不知道我在Tomcat中插入try/catch塊的位置時弄錯了位置。

任何幫助表示讚賞,謝謝!

+0

什麼錯誤產生的?你可以發佈堆棧跟蹤嗎? – Reimeus 2012-08-12 13:38:54

+0

其實你可以看到我有out.println(「連接數據庫」);這僅在Class.forName()後面顯示,而不在「DriverManager.getConnection」後面顯示。 – Kevin 2012-08-12 13:40:21

+0

你的用戶名和密碼是否正確? – JamesB 2012-08-12 13:41:33

回答

1

是JDBC驅動程序的路徑配置或複製到lib目錄(即$ CATALINA_HOME/lib或WEB-INF/lib目錄) ? tomcat的自帶一個比產卵自己的數據庫連接一個更好的方法 -

另外,如果你使用連接池可能會更好。

此外,如果你清理你的數據庫相關的資源(除非你剛剛離開它從上面簡單的代碼)可能會更好。

希望這會有所幫助。

是的,我同意其他反應 - 讓更詳細的錯誤日誌可能是最佳途徑。

0

不是使用System.err.println,而是使用e.printStackTrace()。由於錯誤流被緩衝,所以可能沒有機會被刷新。使用printStacktrace將保證你看到異常細節。

0

也許你可以去Tomcat的日誌文件夾,查找備用ERR日誌文件

0

請更改您的代碼;

Class.forName("com.mysql.jdbc.Driver").newInstance(); 

Class.forName("com.mysql.jdbc.Driver");