持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
虽然用过JAVA的人大部分都用过JDBC,准确的说间接的用过,但又有谁仔细的想过JDBC是什么?他是什么时候出来了,出来是做什么的?那我们就带着这些疑问来继续下面的学习。
JDBC(Java 数据库连接)是一种 Java API,用于管理连接到数据库、发出查询和命令以及处理从数据库获得的查询结果,JDBC 于 1997 年作为 JDK 1.1 的一部分发布,是最早为 Java 语言开发的库之一。JDBC 最初的想法是为一种客户端的API,使 Java 客户端能够与数据源进行交互。JDBC 2.0 改变了这种情况,其中包括一个功能是支持服务器端 JDBC 连接的可选包。从那时起,每个新的 JDBC 版本都对客户端包 ( java.sql) 和服务器端包 ( javax.sql) 进行了更新。JDBC 4.3 是目前最新版本,作为JSR 221于 2017 年 9 月作为 Java SE 9 的一部分发布。
JDBC 的工作原理 作为开发人员,您可以使用 JDBC 在 Java 程序中与数据库进行交互。JDBC 充当从代码到数据库的桥梁,如图 1 所示。
JDBC 与 ODBC 在 JDBC 之前,开发人员使用开放式数据库连接 (ODBC),这是一种与语言无关的标准方法来访问关系数据库管理系统或 RDBMS。在某些方面,JDBC 的灵感来自 ODBC。不同之处在于 JDBC 是特定于 Java 的,它提供了一个编程级接口来处理 Java 应用程序与数据库通信的机制。
JDBC的架构,JDBC 接口由两层组成:
JDBC API 支持 Java 应用程序和 JDBC 管理器之间的通信。
JDBC 驱动程序支持 JDBC 管理器和数据库驱动程序之间的通信。
多年来,JDBC API 和 JDBC 驱动程序得到了广泛的改进,从而形成了一个功能丰富、高性能且可靠的组件库。
了解了这么多,下面我们实践下吧,实践出真知嘛。
简单的数据库连接和查询 在 Java 生态系统中编程的好处之一是,您可能会为您选择的任何数据库找到一个稳定的 JDBC 数据库连接器。在本教程中,我们将使用SQLite来了解 JDBC,主要是因为它非常易于使用。
使用 JDBC 连接数据库的步骤如下:
- 安装或定位您要访问的数据库。
- 包括 JDBC 库。
- 确保您需要的 JDBC 驱动程序位于您的类路径中。
- 使用 JDBC 库获取到数据库的连接。
- 使用连接发出 SQL 命令。
- 完成后关闭连接。 我们将一起完成这些步骤。
这里我们将以SQLite为例进行学习。
1. 下载并安装SQLite
SQLite 是一个非常轻便的数据库。它不适用于生产环境,但它是快速尝试的绝佳选择。SQLite 使用文件作为其功能数据库,无需安装任何服务或守护程序,绿色无毒、方便、快捷莫非就是它了。
要开始这个演示,首先下载SQLite 示例数据库。解压缩.db文件并将其保存在您不会忘记的地方。该文件包含一个功能性的基于文件的数据库以及我们可以使用的示例模式和数据
步骤 2. 将 JDBC导入Java程序
创建空白文档保存为MyFristJdbc.java,粘贴下面的代码进去。
class MyFristJdbc{
public static void main(String args[]){
System.out.println("Hello World");
}
}
现在,通过输入命令编译代码:javac MyFristJdbc.java. 编译将输出MyFristJdbc.class文件。使用调用从命令行执行此文件:java MyFristJdbc. 会输出Hello World 就正确了。如下图:
代码增加头部:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
这些导入中的每一个都提供对促进标准 Java 数据库连接的类的访问:
Connection表示与数据库的连接。DriverManager获取到数据库的连接。(另一个选项是DataSource,用于连接池。)SQLException处理 Java 应用程序和数据库之间的 SQL 错误。ResultSet并对Statement数据结果集和 SQL 语句进行建模。
下载最新的SQLite 驱动程序 SQLite.jar,当然这里也可以使用IDE来进行添加,或使用Maven 或 Gradle 或类似的东西,您可以通过Maven 存储库添加驱动程序。
测试执行代码:
javac -cp f:\sqlite-jdbc-3.36.0.3.jar MyFristJdbc.java
编译没有报错就可以了。
下面编写查询语句,完整代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
class MyFristJdbc{
public static void main(String[] args) {
String sql = "SELECT id, username FROM users WHERE id = ?";
String url = "jdbc:sqlite:f:\\chinook.db";
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement()) {
try {
ResultSet rs = stmt.executeQuery("select * from albums");
while (rs.next()) {
String name = rs.getString("title");
System.out.println(name);
}
} catch (SQLException e ) {
throw new Error("Problem", e);
}
} catch (SQLException e) {
throw new Error("Problem", e);
}
}
}
执行编译和运行:
javac -cp f:\sqlite-jdbc-3.36.0.3.jar MyFristJdbc.java
java -classpath f:\sqlite-jdbc-3.36.0.3.jar;f:\ MyFristJdbc
输出查询结果如下:
明天继续,今天有事情暂时到这里。