Mysql 帮助-使用Java7及更高版本删除JDBC样板代码

Mysql 帮助-使用Java7及更高版本删除JDBC样板代码,mysql,jdbc,prepared-statement,Mysql,Jdbc,Prepared Statement,与RAII/C++或PythonDB相比,JDBC的性能表现出相当多的代码混乱。难道我们不都想要一些不那么冗长的东西吗?:)因此,本着稍微精简的精神,下面的代码片段是否是Java 7下关闭自动提交的JDBC(MySQL Connector/J)最简单但最正确的版本 try ( Connection con = DBConnection.getConnection() ) { PreparedStatement stmt = con.prepareStatement(..); stmt.s

与RAII/C++或PythonDB相比,JDBC的性能表现出相当多的代码混乱。难道我们不都想要一些不那么冗长的东西吗?:)因此,本着稍微精简的精神,下面的代码片段是否是Java 7下关闭自动提交的JDBC(MySQL Connector/J)最简单但最正确的版本

try ( Connection con = DBConnection.getConnection() ) {
  PreparedStatement stmt = con.prepareStatement(..);
  stmt.setInt(1, ..);
  stmt.executeUpdate();
  con.commit();
}

注意,没有显式“检查和回滚”的finally块。

当然,您必须导入相关的包。然后您可以使用
Class.forName(DB\u DRIVER\u Class)。最后,您可以省略
catch
部分(关闭连接),但前提是您立即终止程序,而不执行其他连接或其他数据库操作。

“仅当您立即终止”——您为什么这么说?在上面的代码片段中,什么样的资源泄漏需要程序终止?因为每个连接在打开之前,都会“减去”到DBMS服务器(根据用于连接的资源和可以接受的其他连接的数量)和到客户端(根据java程序使用的资源)的资源。此外,如果由于某种原因,
自动连接
被设置为false,则当前事务仍然未终止,从而降低了访问数据的并发程度。这就是try with resources所做的。当作用域退出时,它会释放连接(异常或正常)。