簡體   English   中英

用servlet關閉數據庫連接的問題

[英]problem with closing connection on db with servlet

我第一次嘗試使用tomcat運行我的應用程序時,我正在調試/運行該應用程序,但其工作正常。 但是當我嘗試第二次運行時,出現錯誤“ XJ040”。

      "Failed to start database 'C:\Documents and Settings\vitaly87\.netbeans-     derby\articals' with class loader WebappClassLoader
         context: /WebApplication1
     delegate: false
        repositories:

我認為是問題所在,因為關閉連接時出現問題。由於我停止服務器后,問題才解決,直到第二次運行。

這里的代碼:

      private Connection connect = null;
//private Statement  stmt = null;
private PreparedStatement preparedStatement = null;
private ResultSet resultSet = null;
     public  ArrayList<story> stories=new ArrayList<story>();
            void getStories(String  version) throws SQLException{

       try{

         Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

          }catch(ClassNotFoundException e){
              System.out.println(e);
          }
            connect = DriverManager.getConnection( "jdbc:derby:C:\\Documents and Settings\\vitaly87\\.netbeans-derby\\articals", "admin", "admin");
         // statement = connect.createStatement();
              int  ArticlesId= Integer.parseInt(version);
          preparedStatement = connect.prepareStatement("SELECT * FROM admin.articles  where    id>"+ArticlesId+"");
              resultSet = preparedStatement.executeQuery();
          while (resultSet.next()) {
    stories.add(new      story(resultSet.getString("title"),resultSet.getString("date"),resultSet.getString("text")));
}
            close();
            }
            //close connection
private void close() {
    try {
        if (resultSet != null) {
            resultSet.close();
        }



        if (connect != null) {
            connect.close();
        }
    } catch (Exception e) {

    }

謝謝你的幫助

最好總是在最后關閉連接

connect = DriverManager.getConnection(...)

try
{
    // use connection
}
finally
{
    try
    {
        connect.close()
    }
    catch (SQLException e)
    {
        // log e
    }
}

在您的代碼中,如果您在parseInt(version)或exequteQuery()中有異常,則不會關閉連接

同樣在您的情況下,我認為不必關閉結果集,因為無論如何您都在關閉連接。

try {
    if (resultSet != null) {
        resultSet.close();
    }

    if (connect != null) {
        connect.close();
    }
} catch (Exception e) {

}

這是有問題的,因為1.如果resultSet.close()引發異常,則連接永遠不會關閉,並且2.該方法不會引發任何異常。 我建議至少記錄所捕獲的異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM