1. 关系数据库简介
在介绍JDBC之前,我们先来简单了解一下关系数据库的基本概念。
程序运行时,数据通常保存在内存中。而当程序终止时,数据需要保存到磁盘,无论是本地磁盘还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。如何定义数据存储格式成为一个重要的问题。我们可以通过多种方式来存储数据,以下是几种常见格式的示例:
1.1 文本文件存储格式
例如,保存一个班级所有学生的成绩单,可以将数据存储在一个文本文件中,每一行保存一个学生的姓名和成绩,用逗号(,
)分隔:
Michael,99
Bob,85
Bart,59
Lisa,87
1.2 JSON格式存储
另一种存储方式是使用JSON格式,这也是一种常见的文本格式:
json
[
{"name":"Michael","score":99},
{"name":"Bob","score":85},
{"name":"Bart","score":59},
{"name":"Lisa","score":87}
]
1.3 存储的挑战
虽然上述存储格式简单易懂,但存储和读取过程需要我们自己实现。特别是当数据量庞大时(例如,40GB的蓝光电影),这些格式可能无法快速查询,因为它们只能通过加载所有数据到内存中进行遍历。而且当我们自己定义格式时,可能会出现不同的存储方式,不同格式间无法直接交换或高效查询。
为了克服这些问题,关系数据库应运而生,提供了更为高效的存储、管理和查询数据的方案。
2. 关系数据库的概念
2.1 关系模型
关系数据库的核心概念是关系模型。关系模型基于数学理论构建,通过表格的方式将数据进行结构化存储。我们可以将数据组织为多个表格(表),并通过这些表格之间的关系来高效查询和管理数据。
举个例子,假设有一个学校,其中包含多个年级和班级,年级和班级之间是“多对多”的关系,可以通过两张表来表示:
-
Grade 表:记录每个年级的信息。
-
Class 表:记录每个班级的信息,并通过
grade_id
字段来与Grade
表建立关联。
2.2 SQL查询
在关系数据库中,查询数据是通过SQL(结构化查询语言)来实现的。例如,我们可以通过如下的SQL查询来查找年级ID为1的所有班级:
sql
SELECT * FROM classes WHERE grade_id = '1';
返回的结果也是一个表格:
grade_id | class_id | name |
---|---|---|
1 | 11 | 一年级一班 |
1 | 12 | 一年级二班 |
1 | 13 | 一年级三班 |
类似地,班级表(Class)中的每一行记录,也可以关联到学生表(Student)的多行记录,形成复杂的数据关联结构。
3. 数据库的分类
3.1 商用数据库
关系数据库的种类繁多,常见的商用数据库包括:
-
Oracle:一种高端数据库,广泛应用于企业级解决方案。
-
SQL Server:由微软开发,特别适用于Windows平台。
-
DB2:IBM推出的数据库,主要用于大型企业级应用。
-
Sybase:曾是微软的合作伙伴,现已衰退。
3.2 开源数据库
由于商业数据库价格昂贵,尤其在需要大量部署时,开源数据库成为了广泛应用的选择。常见的开源关系数据库包括:
-
MySQL:使用最广泛的开源关系数据库。
-
PostgreSQL:功能强大,适合学术研究,但在行业应用中的知名度不如MySQL。
-
SQLite:轻量级数据库,适合嵌入式系统和桌面应用。
作为Java开发者,最推荐使用MySQL,因为它拥有广泛的社区支持、丰富的工具和文档,且适用性强。
4. 安装 MySQL
4.1 下载与安装
为了继续本教程的学习,你需要从MySQL官方网站下载并安装MySQL Community Server版本(免费版)。根据你的操作系统选择合适的安装文件并安装即可。
-
Windows用户:在安装时请选择UTF-8编码,以确保中文字符正确显示。
-
Mac/Linux用户:需要手动编辑MySQL配置文件,设置字符集为UTF-8。
在配置文件my.cnf
中加入以下内容:
ini
[client]
default-character-set = utf8
[mysqld]
default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci
重启MySQL后,可以通过命令行检查字符集配置:
bash
$ mysql -u root -p
Enter password:
mysql> show variables like '%char%';
如果显示结果中所有字符集设置为utf8
,说明配置成功。
4.2 使用MySQL
安装完成后,你可以通过命令行工具(mysql
)或图形化工具(如MySQL Workbench)连接并管理你的数据库。
5. JDBC简介
5.1 什么是JDBC
JDBC(Java Database Connectivity)是Java与数据库之间的标准接口,它允许Java程序通过统一的方式访问不同的数据库。JDBC并不直接与数据库通信,而是通过JDBC驱动来实现与数据库的连接和数据交互。
5.2 JDBC的工作原理
JDBC接口是Java标准库提供的一个接口包java.sql
,而具体的数据库连接实现由数据库厂商提供的JDBC驱动完成。例如,MySQL的JDBC驱动由Oracle提供。Java代码只需引用相应数据库的JDBC驱动,通过JDBC接口与数据库进行交互。
以下是JDBC的工作流程:
-
Java应用程序通过JDBC接口发送数据库请求。
-
JDBC接口通过JDBC驱动将请求转化为特定数据库的通信协议。
-
数据库响应请求并返回数据,JDBC驱动将其转化为Java对象返回给应用程序。
5.3 JDBC驱动架构
JDBC的架构如下所示:
graphql
┌───────────────┐
│ Java App │
└───────────────┘
│
▼
┌───────────────┐
│ JDBC Interface│
└───────────────┘
│
▼
┌───────────────┐
│ JDBC Driver │
└───────────────┘
│
▼
┌───────────────┐
│ Database │
└───────────────┘
每个数据库厂商提供的JDBC驱动是一个实现了JDBC接口的Java类库。通过这些驱动,Java程序能够访问不同的数据库。
6. JDBC的优势
使用JDBC的主要优势包括:
-
统一的接口:不同数据库厂商提供相同的接口,Java程序无需为不同数据库编写单独的代码。
-
数据库独立性:Java程序依赖标准的
java.sql
包,不依赖具体的数据库实现。 -
灵活的底层数据库切换:在不修改Java代码的前提下,可以方便地切换底层数据库,只需要替换JDBC驱动即可。
小结
在本教程中,我们了解了JDBC的基本概念和工作原理。JDBC提供了一种统一的方式来访问不同的数据库,这使得Java程序能够高效地与数据库进行交互。在实际开发中,了解和掌握JDBC是每个Java开发者必须具备的技能。
希望你已经对JDBC有了初步的了解,接下来的学习将会深入探讨如何使用JDBC进行数据库操作。