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

Java 使用servlet关闭数据库上的连接时出现问题,java,sql,derby,Java,Sql,Derby,第一次调试/运行应用程序时,我正在尝试使用tomcat an运行我的应用程序,它工作正常。但当我试图第二次运行时,我得到了错误“XJ040” 我认为问题是因为关闭连接有问题,因为当我停止服务器时,问题会一直持续到第二次运行 代码如下: private Connection connect = null; //private Statement stmt = null; private PreparedStatement preparedStatement = null; priva

第一次调试/运行应用程序时,我正在尝试使用tomcat an运行我的应用程序,它工作正常。但当我试图第二次运行时,我得到了错误“XJ040”

我认为问题是因为关闭连接有问题,因为当我停止服务器时,问题会一直持续到第二次运行

代码如下:

      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) {

    }
private connect=null;
//私有语句stmt=null;
private PreparedStatement PreparedStatement=null;
私有ResultSet ResultSet=null;
public ArrayList stories=new ArrayList();
void getStories(字符串版本)引发SQLException{
试一试{
forName(“org.apache.derby.jdbc.EmbeddedDriver”);
}catch(classnotfounde异常){
系统输出打印ln(e);
}
connect=DriverManager.getConnection(“jdbc:derby:C:\\Documents and Settings\\vitaly87\\.netbeansderby\\articles”、“admin”、“admin”);
//语句=connect.createStatement();
int ArticlesId=Integer.parseInt(版本);
preparedStatement=connect.prepareStatement(“从admin.articles中选择*,其中id>”+ArticlesId+”);
resultSet=preparedStatement.executeQuery();
while(resultSet.next()){
添加(新故事(resultSet.getString(“标题”)、resultSet.getString(“日期”)、resultSet.getString(“文本”));
}
close();
}
//密切联系
私人作废关闭(){
试一试{
if(resultSet!=null){
resultSet.close();
}
if(connect!=null){
connect.close();
}
}捕获(例外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.if resultSet.close()抛出异常连接从未关闭,2.此方法中不会引发任何异常。我建议至少记录捕获的异常。

一个补充:如果在方法中使用后关闭语句和连接,我建议不要将它们作为类成员在方法之间共享,而是使用局部变量bles。这将减少尝试重用不存在的东西的危险。为什么不在close函数的开头放一条print语句,看看它是否运行过。
try {
    if (resultSet != null) {
        resultSet.close();
    }

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

}