有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用servlet关闭数据库上的连接时出现java问题

第一次调试/运行应用程序时,我正在尝试使用tomcat an运行我的应用程序,它工作正常。但当我试图第二次运行时,我得到了错误“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) {

    }

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    最好总是密切联系在一起

    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。如果结果集。close()抛出一个异常:连接从未关闭,2。在这个方法中你不会看到任何异常。我建议至少记录捕获的异常