Java JDBC
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");
传递给Class
forName()方法的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();