无论线程问题如何,您都 绝对 应该使用连接池。它将大大提高连接性能。然后到线程问题,这确实是一个主要问题。JDBC的惯用法是在 尽可能短的范围内*
获取 并 关闭 所有资源。也就是说,所有操作都应在同一方法块中进行。您正在描述的问题症状表明您没有正确关闭这些资源。 *
无论连接是否来自池,关闭都应始终进行。如果关闭非池化连接,则当数据库保持打开状态太长时间时,它将防止数据库超时。关闭池化连接实际上会将其释放回池,并使其可用于下一个租约。
这是的情况下,普通JDBC惯用法的样子
INSERT。
public void create(Entity entity) throws SQLException { // Declare. Connection connection = null; PreparedStatement statement = null; try { // Acquire. connection = database.getConnection(); statement = connection.prepareStatement(SQL_CREATE); // Use. statement.setSomeObject(1, entity.getSomeProperty()); // ... statement.executeUpdate(); } finally { // Close. if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {} if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} }}


