目录
一. 简介
二. 数据持久化
三. 安装MySQL
四. JDBC API
五. 三个重要接口
一. 简介
数据库编程是指使用编程语言与数据库进行交互,以实现数据的存储、检索、更新、删除等操作。
在数据库编程中,常见的任务包括:
连接数据库:通过特定的驱动程序和连接字符串,建立应用程序与数据库的通信链路。
执行 SQL 语句:使用编程语言发送结构化查询语言(SQL)语句到数据库服务器,如
SELECT
进行查询、INSERT
进行插入、UPDATE
进行更新、DELETE
进行删除等。处理结果集:对于查询操作,接收并处理从数据库返回的结果集,提取所需的数据。
事务处理:确保一组相关的数据库操作要么全部成功,要么全部失败,以保持数据的一致性。
错误处理:捕获和处理在与数据库交互过程中可能出现的各种错误。
数据库编程可以使用多种编程语言,如 Java、Python、C# 等。每种语言都有相应的数据库连接库和 API 来实现与不同类型数据库(如 MySQL、Oracle、SQL Server 等)的交互。
数据库编程的目的是使应用程序能够有效地利用数据库来存储和管理数据,为业务逻辑提供可靠的数据支持。
例如,在一个电子商务网站中,数据库编程用于管理用户信息、订单详情、商品库存等数据。
通过合理的数据库编程,可以提高应用程序的性能、数据的安全性和准确性。
二. 数据持久化
数据持久化是指将数据在瞬时状态和持久状态之间进行转换的过程。简单来说,就是将程序运行时产生的数据(通常存放在内存中)保存到非易失性存储介质(如硬盘、数据库等)中,以便在程序关闭后数据不会丢失,并且在下次程序启动时能够重新加载和使用。
数据持久化的主要作用包括:
数据备份和恢复:确保数据的安全性和可用性,在出现故障或错误时能够恢复数据。
长期存储:内存中的数据在计算机关闭后会丢失,而持久化的数据可以长期保存。
数据共享:多个应用程序或用户可以访问和使用持久化的数据。
常见的数据持久化技术和方法有:
文件存储:将数据以特定的格式(如文本、二进制等)写入文件。
数据库:使用关系型数据库(如 MySQL、Oracle)或非关系型数据库(如 MongoDB、Redis)来存储和管理数据。
对象关系映射(ORM)框架:如 Hibernate、MyBatis 等,用于在面向对象编程语言和关系型数据库之间进行映射和数据操作。
序列化:将对象转换为字节流进行存储或传输,反序列化则将字节流还原为对象。
例如,在一个在线博客系统中,文章的内容、用户的评论等数据都需要进行持久化,以便用户随时可以查看历史记录,并且系统在重启后数据仍然存在。
总之,数据持久化是软件开发中非常重要的一个环节,有助于保证数据的完整性、一致性和可用性。
三. 安装MySQL
社区版下载地址
MySQL :: Download MySQL Installer
一直下一步下一步即可.
四. JDBC API
JDBC(Java Database Connectivity)API 是 Java 中用于连接数据库和执行数据库操作的一组标准接口和类。
JDBC API 的主要组成部分包括:
DriverManager
类:用于管理数据库驱动程序,并建立与数据库的连接。
Connection
接口:代表与数据库的连接。
Statement
接口:用于执行静态的 SQL 语句。
PreparedStatement
接口:用于执行预编译的 SQL 语句,可提高性能和防止 SQL 注入。
CallableStatement
接口:用于执行存储过程。
ResultSet
接口:表示数据库查询结果集,用于遍历和获取数据。
使用 JDBC API 的一般步骤如下:
- 加载数据库驱动:
Class.forName("com.mysql.jdbc.Driver");
- 获取数据库连接:
String url = "jdbc:mysql://localhost:3306/database_name";
String username = "username";
String password = "password";
Connection connection = DriverManager.getConnection(url, username, password);
- 创建执行语句对象:
Statement statement = connection.createStatement();
// 或
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM table_name WHERE column =?");
- 执行 SQL 语句:
ResultSet resultSet = statement.executeQuery("SELECT * FROM table_name");
// 或
preparedStatement.setString(1, "value");
preparedStatement.executeUpdate();
- 处理结果集(如果是查询操作):
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
// 处理获取到的数据
}
- 关闭资源:
resultSet.close();
statement.close();
connection.close();
JDBC API 为 Java 应用程序与各种不同的数据库进行交互提供了统一的方式,使得开发者可以在不修改大量代码的情况下切换数据库。
实例代码
package org.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Main {
public static void main(String[] args) {
// 数据库连接参数
String url = "jdbc:mysql://localhost:3306/student";
String username = "root";
String password = "123456";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try (Connection connection = DriverManager.getConnection(url, username, password)) {
// 准备 SQL 查询语句
String sql = "SELECT * FROM students";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 执行查询
ResultSet resultSet = preparedStatement.executeQuery();
// 处理结果集
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
// 处理获取到的数据
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ps
五. 三个重要接口
-
Connection
:Connection
对象代表与数据库的连接。通过它,您可以与数据库进行通信和执行各种操作。主要方法和功能:
createStatement()
:创建一个Statement
对象,用于执行静态的 SQL 语句。prepareStatement(String sql)
:创建一个预编译的PreparedStatement
对象,用于执行带有参数的 SQL 语句。commit()
:提交当前事务。rollback()
:回滚当前事务。close()
:关闭与数据库的连接,释放相关资源。
-
Statement
:Statement
对象用于执行静态的 SQL 语句。主要方法和功能:
executeQuery(String sql)
:用于执行SELECT
语句,返回一个ResultSet
对象来获取查询结果。executeUpdate(String sql)
:用于执行INSERT
、UPDATE
、DELETE
等语句,返回受影响的行数。close()
:关闭Statement
对象,释放资源。
由于
Statement
每次执行 SQL 语句时都需要重新编译,效率相对较低,并且容易受到 SQL 注入攻击。 -
ResultSet
:ResultSet
对象代表从数据库查询返回的结果集。主要方法和功能:
next()
:将指针移动到下一行,如果有下一行则返回true
,否则返回false
。getXXX()
方法(如getInt()
、getString()
等):根据指定的数据类型获取当前行指定列的值。close()
:关闭ResultSet
对象,释放相关资源。
在使用完
ResultSet
后,务必调用close()
方法来释放资源,以避免资源泄漏。
例如,以下是一个简单的示例展示它们的使用:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DatabaseExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/database_name";
String username = "username";
String password = "password";
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM table_name");
ResultSet resultSet = preparedStatement.executeQuery()) {
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
// 处理获取到的数据
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在上述示例中,首先建立连接,然后创建预处理语句并执行查询得到结果集,最后通过遍历结果集获取数据。