【发布时间】:2018-01-10 19:59:47
【问题描述】:
有点困惑 - 假设我们像这样创建 InitialContext 和 DataSource:
InitialContext ctx = new InitialContext();
DataSource ds = ((DataSource) ctx.lookup("jdbc/hsqldb"));
现在在做一些数据库操作的时候,建议关闭ctx:
if (ctx != null) {
ctx.close();
}
但是here InitialContext 被简单地初始化为null:
import java.sql.*;
import javax.sql.*;
import javax.ejb.*;
import javax.naming.*;
public class DistributedTransactionBean implements SessionBean {
// ...
public void ejbCreate() throws CreateException {
ctx = new InitialContext();
ds = (DataSource)ctx.lookup("jdbc/distCoffeesDB");
}
public void updateTotal(int incr, String cofName, String username,
String password)
throws SQLException {
Connection con;
PreparedStatement pstmt;
try {
con = ds.getConnection(username, password);
pstmt = con.prepareStatement("UPDATE COFFEES " +
"SET TOTAL = TOTAL + ? " +
"WHERE COF_NAME = ?");
pstmt.setInt(1, incr);
pstmt.setString(2, cofName);
pstmt.executeUpdate();
stmt.close();
} finally {
if (con != null) con.close();
}
}
private DataSource ds = null;
private Context ctx = null;
}
那么当ctx 被初始化为null 而不关闭它时会发生什么?
【问题讨论】:
-
一个询问“哪种方式更好”的问题通常注定会因为主要基于意见而被关闭。不过,这有一个正确的答案:当你准备好使用资源时,总是关闭它们。顺便说一句,关闭资源和清空变量是两个不同的不可比较的事情。
-
好的,问题改了。
标签: java database initial-context