HSQLDB никогда не закрывает соединение с БД - PullRequest
0 голосов
/ 01 марта 2019

Я играю с такой базой данных, и я пытался закрыть соединение HSQLDB после того, как использовал его, но оно все равно открылось в конце.

Код:

//----This methods are in a specific connection class file
    public static Connection conn = null;
    public static Connection getConnection(){       
        try {
            input = new FileInputStream("PathToMyPropertiesFile");
            prop.load(input);
            //The properties constants are correctly checked
            Class.forName(prop.getProperty("DRIVER_HSQLDB"));
            conn = DriverManager.getConnection(prop.getProperty("CONN_HSQLDB"));
        }
        catch(ClassNotFoundException | SQLException e) {
            LOG.log(null,"Error: "+e);
        }
        catch (IOException ex) {
            LOG.log(null,"FILE ERROR: "+ex);
        }
        finally {
            if (input != null) {
                try {
                    input.close();
                } catch (Exception e) {
                    LOG.log(null,"CLOSE ERROR: "+e);
                }
            }
        }   
        return conn;
    }
public static boolean stopConn() {
        try {
            if(conn != null) {
                conn.close();
                System.err.println("\nCLOSE CONN\n"+conn);
                return true;
            }
        } 
        catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
        return false;
    }

//========= the other class file with the methods to use the conneciton
public static boolean insertUser(String uName, String uEmail){
        Connection con;
        con = ConnectionDB.getConnection();
        PreparedStatement ps = null;
        try {
            String consulta = "insert into USERS (\"NICK\",\"EMAIL\") VALUES(?,?);";
            ps = con.prepareStatement(consulta);

            System.err.println(ps);
            ps.setString(1,uName);
            ps.setString(2,uEmail);
            System.err.println("\nASSIGNATION\n"+ps);

            if(ps.executeUpdate() == 1) {
                System.err.println("\nTRUE\n");
                return true;
            }
        }
        catch(SQLException e) {
            e.printStackTrace();
        }
        finally {
            try {
                System.err.println("\nFINALLY\n"+ps);
                if(ps != null) {
                    ps.close();
                    System.err.println("\nCLOSE PS\n"+ps);
                }
                if(con != null) {
                    con.close();
                    System.err.println("\nCLOSE CON\n"+con);
                    if(ConnectionDB.stopConn()) {
                        System.err.println("\nALL IS OK\n"+ConnectionDB.conn);
                    }
                    else {
                        System.err.println("\nMEEEEKKKK!!!\n"+ConnectionDB.conn);
                    }   
                }
            }
        }
        return false;
    }

Консоль дает мне этот результат, и я не знаю, почему никогда не закрывается соединение, потому что я пытался закрыть его дважды.Если у кого-то есть идея, пожалуйста, скажите мне.

org.hsqldb.jdbc.JDBCPreparedStatement@4501280b [sql = [вставить в значения USERS ("NICK", "EMAIL") (?,?);], Параметры = [[null],[null]]]

ASSIGNATION org.hsqЭто мое cldb.jdbc.JDBCPreparedStatement@4501280b [sql = [вставить в USERS ("NICK", "EMAIL") VALUES (?,?);], параметры= [[extra], [extra@mail.com]]]

TRUE

FINALLY org.hsqldb.jdbc.JDBCPreparedStatement@4501280b [sql = [вставить в USERS ("NICK","EMAIL") VALUES (?,?);], Параметры = [[extra], [extra@mail.com]]]

ЗАКРЫТЬ PS org.hsqldb.jdbc.JDBCPreparedStatement@4501280b [закрыто]

ЗАКРЫТЬ КОН КОНТ. Org.hsqldb.jdbc.JDBCConnection@3e5b87f5

ЗАКРЫТЬ КОНН org.hsqldb.jdbc.JDBCConnection@3e5b87f5

ВСЕЙ ОКБ org.3e5b87f5

1 Ответ

0 голосов
/ 03 марта 2019

Закрытие соединений JDBC не закрывает базу данных в процессе.Это позволяет вам открывать и закрывать различные соединения во время выполнения вашего приложения.

Вам необходимо выполнить инструкцию JDBC, чтобы закрыть базу данных.Оператор SQL для выполнения - «SHUTDOWN».

Можно добавить свойство соединения «shutdown = true» в URL-адрес соединения JDBC, чтобы принудительно завершить работу, когда последнее соединение с базой данных в процессе являетсязакрыто.Но это в основном полезно для чтения или тестирования баз данных.Полное отключение позволяет быстро открывать базу данных при следующем установлении соединения.

См. Руководство http://hsqldb.org/doc/2.0/guide/running-chapt.html#rgc_inprocess

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...