Try With Resources
关闭连接JDBC连接类java.sql.Connection
表示到关系数据库的数据库连接。在通过JDBC从数据库读取数据或向数据库写入数据之前,您需要打开与数据库的连接。本JDBC连接教程将向您展示如何做到这一点。
在打开到数据库的JDBC连接之前,您需要做的第一件事是加载数据库的JDBC驱动程序。事实上,从Java6开始,这不再是必要的,但这样做不会失败。您可以像这样加载JDBC驱动程序:
Class.forName(“driverClassName”);
每个JDBC驱动程序都有一个主驱动程序类,该类在加载驱动程序时初始化驱动程序。例如,要加载Oracle驱动程序,可以编写以下内容:
Class.forName(“oracle.jdbc.driver.OracleDriver”);
你只需要加载一次驱动程序。您不需要在每次连接打开之前加载它。仅在第一个JDBC连接打开之前。
通过调用java.sql.DriverManager
类方法getConnection()
打开JDBC连接。这种方法有三种变体。我将在以下部分中展示每种变体。
第一种方法变体只将数据库的URL作为参数。以下是仅使用URL作为参数调用getConnection()
的方式:
String url = "jdbc:oracle:thin:@127.0.0.1:1522:cs";
Connection connection = DriverManager.getConnection(url);
url是数据库的url。您应该查看数据库和JDBC驱动程序的文档,以了解特定数据库的格式。上面显示的url是一个Oracle。
getConnection()
的第二个变体将数据库URL、用户名和密码作为参数。下面是一个调用getConnection()
变体的示例:
String url = "jdbc:oracle:thin:@127.0.0.1:1522:cs";
String user = "test";
String password = "password";
Connection connection =
DriverManager.getConnection(url, user, password);
用户和密码参数是数据库的用户名和密码。
getConnection()
的第三个变体采用数据库URL
和Properties
对象作为参数。以下是调用getConnection()
的此变体的示例:
String url = "jdbc:oracle:thin:@127.0.0.1:1522:cs";
Properties properties = new Properties( );
properties.put( "user", "test" );
properties.put( "password", "password" );
Connection connection =
DriverManager.getConnection(url, properties);
Properties
对象用于在打开连接时传递数据库所需的特殊属性。给定数据库到底需要什么属性,取决于数据库及其功能等。您必须查看给定数据库及其JDBC驱动程序的文档才能了解这一点。
一旦你使用完数据库连接,你就应该关闭它。这是通过调用connection.close()
方法来完成的,如下所示:
connection.close();
完成JDBC连接后关闭它很重要。数据库连接占用大量资源,无论是在您自己的应用程序中,还是在数据库服务器上。因此,保持未使用的数据库连接处于打开状态将需要数据库保留为该连接分配的不必要资源。
可以通过Java 7中添加的Java Try with resources
构造自动关闭JDBC连接。以下是如何做到这一点的示例:
String url = "jdbc:oracle:thin:@127.0.0.1:1522:cs";
String user = "test";
String password = "password";
try(Connection connection =
DriverManager.getConnection(url, user, password)) {
//use the JDBC Connection inhere
}
正如您所看到的,JDBC连接是在try
块的括号中打开的。在try
块中,您可以像往常一样使用数据库连接。一旦执行退出try
块,JDBC连接将自动为您关闭。这样您就不会忘记自己关闭JDBC连接。
JDBC连接setAutoCommit()
方法用于将连接切换到或退出自动提交模式。在自动提交模式下,发送到数据库的每个更新都将立即提交,就像在自己的事务中执行一样。当不处于自动提交模式时,必须通过调用Connection commit()
方法显式提交每个数据库事务。在后面的JDBC事务章节有更详细的解释
以下是将JDBC连接切换到自动提交模式的示例:
connection.setAutoCommit(true);
下面是一个将JDBC连接从自动提交模式切换出来的示例:
connection.setAutoCommit(false);
如果没有指定自动提交模式,JDBC连接的默认模式是打开自动提交模式。
JDBC Connection commit()
方法提交事务。JDBC事务教程中详细介绍了事务的工作方式和处理方式。下面是一个通过JDBC连接提交事务的简单示例。请注意,正确的异常处理已被排除在本示例之外,以使其简洁明了。
connection.setAutoCommit(false);
//对JDBC连接执行操作
//将成为事务的一部分
connection.commit();
请记住,如果事务中的某些操作失败,您很可能希望调用rollback()
方法而不是commit()
。
Java JDBC Connection rollback()
方法回滚当前正在进行的事务中执行的操作。JDBC事务教程中详细介绍了如何处理对commit()
和/或rollback()
的调用。下面是一个调用JDBC Connection rollback()
方法的简单示例:
try{
connection.setAutoCommit(false);
// perform operations on the JDBC Connection
// which are to be part of the transaction
connection.commit();
} catch (SQLException e) {
connection.rollback();
}
请注意rollback()
是如何在try-catch
块的catch
块中调用的。如果在尝试执行事务中的操作时抛出异常,则会回滚整个事务。
JDBC连接createStatement()
创建一个JDBC语句对象。语句实例可用于对数据库执行SQL
更新,或对数据库执行SQL查询。以下是通过JDBC Connection createStatement()
方法创建JDBC语句实例的示例:
Statement statement = connection.createStatement();
JDBC Connection createStatement()
创建一个JDBC PreparedStatement
对象。PreparedStatement
实例可用于对数据库执行SQL更新,或对数据库执行SQL查询。以下是通过JDBC Connection createStatement()
方法创建JDBC prepareStatement
实例的示例:
String sql = "select * from test where id=?";
PreparedStatement preparedStatement =
connection.prepareStatement(sql);
JDBC Connection getMetaData()
方法返回一个JDBC DatabaseMetaData
对象,该对象可用于内省JDBC Connection
连接到的数据库。JDBC DatabaseMetaData教程介绍了如何使用DatabaseMetaData。以下是通过JDBC Connection getMetaData()
方法创建JDBC DatabaseMetaData对象的示例:
DatabaseMetaData databaseMetaData = connection.getMetaData();
下一篇:JDBC:查询数据库