JDBC连接

时间:2020-01-09 10:36:46  来源:igfitidea点击:

JDBC Connection类java.sql.Connection表示与关系数据库的数据库连接。我们必须先打开与数据库的连接,然后才能通过JDBC从数据库读取数据或者向数据库写入数据。本JDBC连接教程将向我们展示如何做到这一点。

加载JDBC驱动程序

打开与数据库的JDBC连接之前,我们需要做的第一件事是为数据库加载JDBC驱动程序。实际上,从Java 6开始,这不再是必需的,但是这样做不会失败。我们可以这样加载JDBC驱动程序:

Class.forName("driverClassName");

每个JDBC驱动程序都有一个主驱动程序类,该类在加载驱动程序时对其进行初始化。例如,要加载H2Database驱动程序,请编写以下代码:

Class.forName("org.h2.Driver");

我们只需要加载一次驱动程序。我们无需在打开每个连接之前加载它。仅在第一个JDBC连接打开之前。

打开JDBC连接

通过调用java.sql.DriverManager类方法getConnection()打开JDBC连接。此方法有三种变体。我将在以下各节中显示每个变体。

使用URL打开连接

第一个方法变体仅将数据库的URL作为参数。这是仅以URL作为参数调用getConnection()的样子:

String url      = "jdbc:h2:~/test";   //database specific url.

Connection connection =
    DriverManager.getConnection(url);

" url"是数据库的URL。我们应该查看数据库和JDBC驱动程序的文档,以了解特定数据库的格式。上面显示的url用于H2Database。

使用URL,用户和密码打开连接

getConnection()的第二个变体同时使用数据库URL,用户名和密码作为参数。这是调用getConnection()的变体的示例:

String url      = "jdbc:h2:~/test";   //database specific url.
String user     = "sa";
String password = "";

Connection connection =
    DriverManager.getConnection(url, user, password);

" user"和" password"参数是数据库的用户名和密码。

使用URL和属性打开连接

" getConnection()"的第三个变体采用数据库URL和" Properties"对象作为参数。以下是调用此getConnection()变体的示例:

String url      = "jdbc:h2:~/test";   //database specific url.

Properties properties = new Properties( );
properties.put( "user", "sa" );
properties.put( "password", "" );

Connection connection =
    DriverManager.getConnection(url, properties);

"属性"对象用于传递打开连接时数据库所需的特殊属性。给定数据库到底需要什么属性,取决于数据库及其函数等。我们必须检查给定数据库及其JDBC驱动程序的文档才能看到。

关闭JDBC连接

使用数据库连接完成后,应将其关闭。这是通过调用Connection.close()方法完成的,如下所示:

connection.close();

完成JDBC连接后,关闭它很重要。数据库连接占用大量资源,这两者都在我们自己的应用程序内部,尤其是在数据库服务器上。因此,使未使用的数据库连接保持打开状态将需要数据库保留为该连接分配的不必要的资源。

通过Try-With-Resources关闭连接

可以通过Java 7中添加的Java Try-with-resources构造自动关闭JDBCConnection。这是如何执行此操作的示例:

String url      = "jdbc:h2:~/test";   //database specific url.
String user     = "sa";
String password = "";

try(Connection connection =
    DriverManager.getConnection(url, user, password)) {

    //use the JDBC Connection inhere
}

如我们所见,JDBC"连接"在" try"块的括号内打开。在try块中,我们可以像往常一样使用数据库连接。一旦执行退出try块,JDBCConnection将自动为我们关闭。这样,我们就不会忘记自己关闭JDBCConnection

setAutoCommit()

JDBC的Connection setAutoCommit()方法用于将连接切换为自动提交模式或者从自动提交模式切换为自动提交模式。在自动提交模式下,发送到数据库的每个更新都将立即提交,就像在其自己的事务中执行一样。如果不在自动提交模式下,则必须通过调用Connection commit()方法显式地提交每个数据库事务。有关JDBC事务的教程对此进行了更详细的说明。

这是将JDBCConnection切换为自动提交模式的示例:

connection.setAutoCommit(true);

这是一个将JDBCConnection退出自动提交模式的示例:

connection.setAutoCommit(false);

如果未指定自动提交模式,则JDBCConnection的默认模式是打开自动提交模式。

犯罪()

JDBCConnection``commit()方法提交事务。 JDBC事务教程中详细介绍了事务如何工作以及应该如何处理。这是一个通过JDBCConnection提交事务的简单示例。请注意,此示例中未包含正确的异常处理,以使其简短。

connection.setAutoCommit(false);

// perform operations on the JDBC Connection
// which are to be part of the transaction

connection.commit();

请记住,如果事务中的某些操作失败,则我们很可能希望调用rollback()方法而不是commit()

rollback()

Java JDBC的Connectionrollback()方法回滚当前正在进行的事务中执行的操作。 JDBC Transactions教程中详细介绍了如何处理对commit()和/或者rollback()的调用。这是一个调用JDBCConnectionrollback()方法的简单示例:

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();
}

注意在try-catch块的catch块中如何调用rollback()。如果在尝试执行事务中的操作时抛出异常,则会回滚整个事务。

createStatement()

JDBC ConnectionConnection createStatement()创建一个JDBC Statement对象。一个State实例可以用来对数据库执行SQL更新,或者对数据库执行SQL查询。这是通过JDBCConnection``createStatement()方法创建JDBCStatement实例的示例:

Statement statement = connection.createStatement();

prepareStatement()

JDBC Connection prepareStatement()创建一个JDBC PreparedStatement对象。 PreparedStatement实例可用于对数据库执行SQL更新,或者对数据库执行SQL查询。以下是通过JDBCConnectionprepareStatement()方法创建JDBCPreparedStatement实例的示例:

String sql = "select * from people where id=?";

PreparedStatement preparedStatement =
        connection.prepareStatement(sql);

getMetaData()

JDBC ConnectiongetMetaData()方法返回一个JDBC DatabaseMetaData对象,该对象可用于自检JDBC Connection连接到的数据库。 JDBC DatabaseMetaData教程介绍了如何使用" DatabaseMetaData"。这是通过JDBCConnection``getMetaData()方法创建JDBCDatabaseMetaData对象的示例:

DatabaseMetaData databaseMetaData = connection.getMetaData();