Tôi mới sử dụng Java (Tôi đang sử dụng Java 6). Tôi đã sử dụng mẫu thiết kế dưới đây cho tất cả các POJO và Java servlet của tôi để truy cập cơ sở dữ liệu Oracle 11G thông qua máy chủ web GlassFish 3.1.2.Java/JDBC: Mẫu thiết kế tốt nhất để đóng kết nối cơ sở dữ liệu khi ngoại lệ xảy ra
Tôi nhận được lỗi cơ sở dữ liệu liên tục (ORA-12519) khi tất cả các quy trình có sẵn (hoặc phiên, không chắc chắn sự khác biệt) được sử dụng, khiến tôi suy nghĩ bằng cách nào đó các quy trình không được ứng dụng phát hành.
Nhìn vào mẫu thiết kế bên dưới, có cách nào tốt hơn để đảm bảo rằng kết nối JDBC tới cơ sở dữ liệu được phát hành trong trường hợp ngoại lệ không? Ví dụ: tôi cũng nên đặt mã if (conn != null) conn.close();
INSIDE khối catch? Hoặc, là có một mẫu thiết kế tốt hơn? Cảm ơn trước cho bất kỳ ý kiến / gợi ý.
public String MyFunction() throws Exception {
Connection conn;
CallableStatement cs;
try {
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jdbc/MyPool");
conn = ds.getConnection();
cs = conn.prepareCall("{call my_sproc (?)}");
cs.registerOutParameter(1, Types.VARCHAR);
cs.execute();
String outParam = cs.getString(1);
if (conn != null) // close connection
conn.close();
} catch (Exception e) {
outParam = "an error occurred";
}
return outparam;
}
Lưu ý rằng nó cũng có thể thực hành tốt để đóng resultsets và báo cáo. Đây là một liên kết hữu ích (xem câu trả lời của Stefan Schweizer trong liên kết cho mẫu thiết kế tốt): http://stackoverflow.com/questions/103938/resultset-not-closed-when-connection-closed – ggkmath