Java JDBC

时间:2020-01-09 14:11:13  来源:igfitidea点击:

Java JDBC API(Java数据库连接性)使Java应用程序可以连接到关系数据库,例如MySQL,PostgreSQL,MS SQL Server,Oracle,H2数据库等。JDBCAPI使得查询和更新关系数据库以及调用存储成为可能程序,并获取有关数据库的元数据。 Java JDBC API是核心Java SE SDK的一部分,使JDBC可用于所有想要使用它的Java应用程序。这是说明使用JDBC连接到关系数据库的Java应用程序的图:

JDBC与数据库无关

Java JDBC API标准化了如何连接到数据库,如何对数据库执行查询,如何导航这种查询的结果,如何在数据库中执行更新,如何调用存储过程以及如何获取元数据。从数据库中。 "标准化"是指代码在不同的数据库产品中看起来是相同的。因此,如果项目将来需要,更改到另一个数据库将容易得多。

JDBC不是SQL独立的

JDBC没有标准化发送到数据库的SQL。 SQL是由我们(JDBC API的用户)编写的。各种不同的数据库使用的SQL方言会略有不同,因此要100%独立于数据库,SQL也必须100%独立于数据库(即使用所有数据库都可以理解的命令)。

JDBC不适用于非关系数据库

Java JDBC API旨在与关系数据库进行交互,即与我们通过标准SQL进行交互的数据库。 JDBC API不适用于非关系数据库,例如Mongo DB,Cassandra,Dynamo等。我们可以从Java应用程序中使用此类数据库,但应了解这些数据库为Java本身提供了哪些驱动程序。

流行的关系数据库

这是具有JDBC驱动程序的流行的开放源代码和商业关系数据库的列表,因此我们可以从Java使用它们:

  • H2Database
  • MariaDB
  • PostgreSQL
  • Derby
  • Microsoft SQL Server
  • Oracle

JDBC教程范围

本JDBC教程介绍了Java 8+中可用的JDBC版本。本教程将不会涵盖JDBC API的每一个细节,而是将重点放在最常用的函数上。其余的内容我们可以在JavaDoc的后续文章中阅读。一旦我们对JDBC有一个很好的了解,那么阅读JavaDoc或者其他地方的最后一个细节就不会那么难了。

本JDBC教程仅涵盖JDBC API。它不涉及SQL,数据库和数据库设计规则等。读者应在其他地方研究这些概念。

JDBC核心概念

Java JDBC API的核心概念是:

  • JDBC驱动程序
  • 连接
  • 语句
  • 预声明语句
  • 可调用语句
  • 结果集
  • 批量更新
  • 事务
  • 数据库元数据

这些概念中的每一个都在其各自的教程中进行了详细说明。不过,在以下各节中,我将仅简要概述如何使用这些核心组件。然后,当我们对JDBC有基本了解时,便可以进入其他教程。

JDBC范例

在开始解释JDBC的各个组件如何工作之前,我将向我们展示一个完整的JDBC示例,该示例加载JDBC驱动程序,打开数据库连接,创建Statement,执行查询并迭代返回的ResultSet

import java.sql.*;

public class JdbcExample {

    public static void main(String[] args) throws ClassNotFoundException {
        Class.forName("org.h2.Driver");

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

        try(Connection connection = DriverManager.getConnection(url, user, password)) {
            try(Statement statement = connection.createStatement()){
                String sql = "select * from people";
                try(ResultSet result = statement.executeQuery(sql)){
                    while(result.next()) {
                        String name = result.getString("name");
                        long   age  = result.getLong  ("age");
                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

如果我们不了解所有内容,请不要担心。以下部分将说明此示例的每个部分。

加载JDBC驱动程序

在Java 6之前,必须在使用JDBC驱动程序之前先加载它。在Java 6之后,这不再是必需的。这是加载H2Database JDBC驱动程序的样子:

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

传递给ClassforName()方法的Java String参数是给定JDBC驱动程序的JDBC驱动程序类的名称。我们将必须为所使用的JDBC驱动程序找到正确的类名称。通常,每个数据库都有自己的JDBC驱动程序,因此,我们将必须查找JDBC驱动程序类的名称(如果使用的是Java 6之前的版本)。

有几种不同的JDBC驱动程序类型。每种类型都有其自身的优点和缺点。我们将必须查看数据库供应商提供的驱动程序类型。

打开数据库连接

为了与数据库进行通信,必须首先打开与数据库的JDBC连接。在我的有关JDBC连接的教程中,更详细地说明了打开JDBC数据库连接的方法,但这是打开JDBCConnection的简单示例:

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

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

建立开放的数据库连接后,通常将更新数据库(插入新记录或者更新现有记录),或者查询数据库,这意味着我们从中读取记录。以下各节将很快介绍这两种操作。

建立语句

无论我们是需要更新还是查询数据库,我们都将需要创建一个JDBC语句或者JDBC PreparedStatement,通过该语句或者更新或者查询将通过JDBC PreparedStatement进行。这是创建JDBCStatement实例的示例:

Statement statement = connection.createStatement();

更新数据库

创建了JDBCStatement或者JDBCPreparedStatement实例后,我们可以更新数据库。这是一个通过Statement实例更新数据库的例子:

Statement statement = connection.createStatement();

String    sql       = "update people set name='John' where id=123";

int rowsAffected    = statement.executeUpdate(sql);

查询数据库

我们也可以通过JDBCStatement或者PreparedStatement对象查询数据库。查询数据库时,我们将获得一个JDBC ResultSet,可以通过该ResultSet访问查询结果。这是通过JDBC对数据库执行查询的示例:

Statement statement = connection.createStatement();

String sql = "select * from people";

ResultSet result = statement.executeQuery(sql);

while(result.next()) {

    String name = result.getString("name");
    long   age  = result.getLong  ("age");

}

关闭数据库连接

完成JDBC数据库连接后,我们必须再次关闭该连接。 JDBC连接在应用程序内部和数据库服务器内部都可能占用大量资源。因此,使用后再次关闭数据库连接很重要。我们可以通过JDBC连接的close()方法关闭它。这是关闭JDBC连接的示例:

connection.close();