【发布时间】:2019-04-14 03:09:38
【问题描述】:
我创建了以下三种方法,但对 shutDownDB() 的真正作用感到困惑。以下是我的问题:
- 为什么我需要一个活动连接来关闭特定数据库?
- 关闭连接然后关闭数据库不是更有意义吗
- 如果特定数据库关闭,为什么我需要关闭连接?
- 为什么我可以在特定数据库关闭后重新建立连接?
- 关闭特定数据库和关闭连接之间的实际区别是什么?
注意:在嵌入式模式下使用 derby
public static Connection openDB(String dbFolderString) {
Connection conn = null;
try{
File dbFolder = new File(dbFolderString);
String URL = "jdbc:derby:" + dbFolderString + ";create=true";
if(print)System.out.println("\n" + "db exists " + dbFolder.exists());
conn = DriverManager.getConnection(URL);
if(print)System.out.println("Succesfully connected to " + dbFolderString);
}catch(SQLException e){
System.out.println("FATAL ERROR: from getDB " + e);
System.exit(0);
}
return conn;
}
public static boolean shutDownDB(Connection conn) {
//shutsdown a specific database but DOES NOT SHUTDOWN DERBY
try{
String[] tokens;
String url = conn.getMetaData().getURL();
tokens = url.split(":");
DriverManager.getConnection("jdbc:derby:" + tokens[2] +";shutdown=true");
}catch(SQLException e1){
if(e1.getSQLState().equals("08006") && e1.getErrorCode() == 45000){
if(false)System.out.println(e1.getSQLState() + " " + e1.getErrorCode());
if(print)System.out.println("\n" + "Database shutdown successful");
}else{
System.out.println(e1.getSQLState() + " " + e1.getErrorCode());
System.out.println("FATAL ERROR: Database not shutdown " + e1);
System.exit(0);
}
}
return true;
}
public static void closeConnection(Connection conn){
try{
conn.close();
if(print)System.out.println("Connection closed");
}catch(SQLException e){
System.out.println("connection NOT closed " + e);
System.exit(0);
}
}
【问题讨论】:
标签: java database-connection derby shutdown