【发布时间】:2014-09-24 06:46:46
【问题描述】:
我已经为我的移动应用程序使用 Servlet 开发了一些 JSON Web 服务。我正在使用(Oracle + Private Tomcat)托管。我有一个单独的类 DBOperations.java,它有很多静态函数,这些函数在 Servets 中调用以进行数据库操作。我在每个函数中使用 getConnection() 方法来获取连接对象、创建语句和执行查询。问题是一段时间后连接丢失。我正在使用以下代码重新建立连接。
public static Connection conn;
Statement stmt;
public static Connection getConnection() throws SQLException {
if (conn == null || conn.isClosed() ) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(DB_URL, "username", "password");
return conn;
} catch (ClassNotFoundException | SQLException ex) {
}
} else {
return conn;
}
return conn;
}
我无法弄清楚如何处理超时/关闭连接问题,因为上面的代码没有重新建立连接。我需要重新启动 Tomcat 以使其恢复工作状态。非常感谢任何建议或帮助。
【问题讨论】:
-
你应该使用连接池。整个应用程序的单个静态 Connection 对象听起来可能会导致各种并发问题。
-
@Thilo 问题是一段时间内一切正常,然后如果它停止工作,重新启动服务器使其再次工作。是否应该执行任何其他验证检查来检查它是死的还是活的?
-
您可以发出“ping”SQL(从双重中选择 *)。连接池会为您处理这个问题。
-
服务器重启修复了这个问题,这意味着重新建立了连接。我正在尝试了解问题所在,如何在不重新启动服务器的情况下重新建立该问题?