![](/img/trans.png)
[英]ExecuteQuery in multiple threads closes hsqldb database connection
[英]HSQLDB never closes DB connection
我正在使用這種數據庫,在使用過后我試圖關閉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 = [插入用戶(“ NICK”,“ EMAIL”)VALUES(?,?);],參數= [[null],[null]]]
分配org.hsq這是我的cldb.jdbc.JDBCPreparedStatement@4501280b [sql = [插入用戶(“ NICK”,“ EMAIL”)VALUES(?,?);],參數= [[extra],[extra@mail.com]。 COM]]]
真正
最終org.hsqldb.jdbc.JDBCPreparedStatement@4501280b [sql = [插入用戶(“ NICK”,“ EMAIL”)VALUES(?,?);],參數= [[extra],[extra@mail.com]] ]
關閉PS org.hsqldb.jdbc.JDBCPreparedStatement@4501280b [關閉]
CLOSE CON org.hsqldb.jdbc.JDBCConnection@3e5b87f5
CLOSE CONN org.hsqldb.jdbc.JDBCConnection@3e5b87f5
一切正常org.hsqldb.jdbc.JDBCConnection@3e5b87f5
關閉JDBC連接不會關閉進程內數據庫。 這使您可以在應用程序運行時打開和關閉不同的連接。
您需要執行JDBC語句來關閉數據庫。 要執行的SQL語句為“ SHUTDOWN”。
可以在JDBC連接URL中添加連接屬性“ shutdown = true”,以在與進程內數據庫的最后一個連接關閉時強制快速關閉。 但這主要對只讀或測試數據庫有用。 完整的SHUTDOWN允許下次連接時數據庫快速打開。
請參閱指南http://hsqldb.org/doc/2.0/guide/running-chapt.html#rgc_inprocess
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.