关闭数据库与servlet连接的问题



我试图用tomcat运行我的应用程序,我第一次调试/运行应用程序,它的工作很好。但是当我试图第二次运行时,我得到错误"XJ040"。

      "Failed to start database 'C:Documents and Settingsvitaly87.netbeans-     derbyarticals' 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) {
    }

thanks for help

最好总是关闭最后的连接

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()抛出异常,则连接永远不会关闭。在此方法中不会看到抛出任何异常。我建议至少记录捕获到的异常

最新更新