我有一个使用static
初始化块来建立与数据库的连接的类。该类有许多查询db的public static
方法。我想在程序终止之前执行的static
块中正确关闭此连接,有点像finally
中的try/catch
块。我几乎可以肯定Java中不存在这样的东西。我是打开和关闭每个查询连接的最佳选择吗?
答案 0 :(得分:3)
看看这个:{{3}}
您可以尝试编写代码来关闭此方法中的连接。
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
//code to close connection
}
}, "Shutdown-thread"));
}
答案 1 :(得分:1)
为每个查询打开和关闭连接将导致系统上的额外开销,使应用程序变慢。
您可以使用try catch块来包围数据库程序的最终查询,并在finally子句中释放连接(用于程序的最后一次查询)。
注意:如果JVM在主线程完成执行之前终止,即执行System.exit(),则后续代码和finally块将不会被执行。
答案 2 :(得分:1)
public class test {
public static void process() throws ClassNotFoundException, SQLException {
JdbcDBManager customerDB = new JdbcDBManager(JdbcURL.URL, JdbcURL.USER, JdbcURL.PASS);
try {
customerDB.insertCustomer(Customer customer);
doSomething(customerDB); // Pass db object as a parameter
} finally { customerDB.close();} // close it when you are finally done
}
doSomething(JdbcDBManager customerDB){
---------------------------
--process info in db-------
} }
您可以为每个数据库创建一个对象,并在最终完成处理后关闭它。
{{1}}
这样您可以打开一次连接,并在进程最终完成时关闭
答案 3 :(得分:0)
打开和关闭每个查询的连接是我的最佳选择吗? 答:没有
我建议你关注:
Singleton Class
用于打开连接,如下所示:
public class connectDB {
static Connection conn = null;
public static Connection getConnection(){
if (conn != null) return conn;
String connString = "DATABASE ACCESS URL HERE";
return getConnection(connString);
}
private static Connection getConnection(String conString){
try{
Class.forName("LOAD DRIVER HERE");
String uname = "DB USERNAME";
String pass = "DB PASSWORD";
conn = DriverManager.getConnection(conString, uname, pass);
}
catch(Exception e){
//Handle Exceptions
e.printStackTrace(); //<--Retrieves the error/Exception for you
}
return conn;
}
}
并通过以下方式关闭连接:
public static void closeConnection(Connection conn) {
try {
conn.close();
}
catch (SQLException e) {
//Handle Exception Here
}
}
打电话
conn = connectDB.getConnection()
用于连接,另一个用于关闭,最好在finally