Skip to content

数据库操作

数据库操作是开发中非常重要的内容之一,特别是在涉及到大量数据存储和查询的应用程序时。Java 提供了强大的 JDBC(Java Database Connectivity)技术,使得 Java 应用能够与数据库进行连接和交互。下面,我将详细介绍数据库的基础知识、JDBC 的使用以及常见数据库操作。

数据库基础知识

什么是数据库

数据库是一个有组织的数据集合,它用于存储和管理数据。数据库可以高效地存储、查询和管理大量的数据。最常见的数据库系统是关系型数据库(如 MySQL、PostgreSQL)和非关系型数据库(如 MongoDB)。

数据库的种类及功能

  1. 关系型数据库:
  • 特点:数据以表格的形式存储,表与表之间可以通过主键和外键建立关联。
  • 常见数据库:MySQL、PostgreSQL、Oracle、SQL Server。
  • 功能:
    • 支持复杂查询。
    • 数据一致性强,支持事务。
    • 数据存储结构清晰。
  1. 非关系型数据库(NoSQL):
  • 特点:数据不以表格的形式存储,通常是文档、键值对、图数据等。
  • 常见数据库:MongoDB、Redis、Cassandra。
  • 功能:
    • 支持灵活的 schema 设计。
    • 通常用于高并发、大数据量的场景。
    • 可以水平扩展,处理分布式数据。

SQL 语言

SQL(Structured Query Language)是用于管理关系型数据库的标准语言。SQL 语言可以用于以下操作:

  • 数据查询:通过 SELECT 查询数据。
  • 数据修改:通过 INSERTUPDATEDELETE 修改数据。
  • 数据库管理:创建、删除数据库和表格。

SQL 示例:

sql
-- 查询所有用户
SELECT * FROM users;

-- 插入新用户
INSERT INTO users (name, age) VALUES ('Tom', 30);

-- 更新用户信息
UPDATE users SET age = 31 WHERE name = 'Tom';

-- 删除用户
DELETE FROM users WHERE name = 'Tom';

JDBC 概述

JDBC(Java Database Connectivity)是 Java 提供的一套 API,允许 Java 程序与关系型数据库进行通信。JDBC 通过一系列接口和类,提供了连接、查询、更新数据库的功能。

JDBC-ODBC 桥接器

早期,JDBC 使用 JDBC-ODBC 桥接器来连接数据库。这个桥接器将 JDBC 请求转发给 ODBC(开放数据库连接)驱动程序,然后 ODBC 驱动程序与数据库通信。随着技术的发展,JDBC 现在大多使用数据库厂商提供的原生 JDBC 驱动程序。

JDBC 技术

JDBC 技术通过提供一组标准接口,允许 Java 应用程序执行数据库操作。JDBC 操作的步骤通常是:

  1. 加载数据库驱动。
  2. 创建数据库连接。
  3. 执行 SQL 语句。
  4. 处理结果集。
  5. 关闭连接。

JDBC 驱动程序的类型

JDBC 驱动程序有四种类型:

  1. JDBC-ODBC 桥接驱动(类型 1):将 JDBC 调用转换为 ODBC 调用。
  2. 本地 API 驱动(类型 2):使用数据库厂商提供的本地库(如 C 语言库)来与数据库通信。
  3. 网络协议驱动(类型 3):通过中间层与数据库通信,支持多种数据库。
  4. 纯 Java 驱动(类型 4):通过 Java 程序直接与数据库通信,不依赖本地库,是最常用的类型。

JDBC 中常用的类和接口

Connection 接口

Connection 是 JDBC 中的一个重要接口,表示与数据库的连接。通过它可以创建 StatementPreparedStatement,并执行 SQL 语句。

常用方法:

  • createStatement():创建一个 Statement 对象。
  • prepareStatement():创建一个 PreparedStatement 对象。
  • close():关闭数据库连接。
java
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");

Statement 接口

Statement 用于执行 SQL 语句,并获取执行结果。Statement 通常用于执行简单的 SQL 查询。

常用方法:

  • executeQuery():执行查询语句,返回结果集。
  • executeUpdate():执行更新操作(如插入、更新、删除)。
java
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");

PreparedStatement 接口

PreparedStatementStatement 的一个子接口,支持预编译的 SQL 语句,适合处理动态参数,避免 SQL 注入攻击。

常用方法:

  • setXXX():设置 SQL 查询中的参数(如 setString()setInt())。
  • executeQuery():执行查询语句,返回结果集。
  • executeUpdate():执行更新操作。
java
String sql = "SELECT * FROM users WHERE age > ?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1, 30); // 设置参数
ResultSet rs = pstmt.executeQuery();

DriverManager 类

DriverManager 是用来管理数据库驱动程序的类,它根据数据库的 URL 加载对应的驱动,并建立数据库连接。

java
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");

ResultSet 接口

ResultSet 用于存储和操作查询的结果集。它允许通过游标遍历结果,并获取结果数据。

常用方法:

  • next():移动游标到下一行。
  • getString()getInt() 等方法:获取某列的数据。
java
while (rs.next()) {
    String name = rs.getString("name");
    int age = rs.getInt("age");
}

数据库操作

连接数据库

连接数据库需要提供数据库 URL、用户名和密码。DriverManager.getConnection() 方法可以用来创建数据库连接。

java
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");

向数据库发送 SQL 语句

可以使用 StatementPreparedStatement 对象来发送 SQL 语句。

java
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO users (name, age) VALUES ('Tom', 30)");

处理查询结果集

ResultSet 对象用于存储查询结果,可以通过 getString()getInt() 等方法获取查询字段。

java
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
    String name = rs.getString("name");
    int age = rs.getInt("age");
    System.out.println(name + " " + age);
}

顺序查询

顺序查询是指通过 ResultSet.next() 遍历查询结果。

java
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
    System.out.println(rs.getString("name"));
}

模糊查询

模糊查询通常使用 LIKE 关键字。例如,查询名字包含 "Tom" 的用户:

java
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE name LIKE ?");
pstmt.setString(1, "%Tom%");
ResultSet rs = pstmt.executeQuery();

预处理语句

PreparedStatement 可以防止 SQL 注入,并且支持预编译 SQL 语句,效率较高。

java
PreparedStatement pstmt = conn.prepareStatement("UPDATE users SET age = ? WHERE name = ?");
pstmt.setInt(1, 35);
pstmt.setString(2, "Tom");
pstmt.executeUpdate();

添加、修改、删除记录

使用 INSERTUPDATEDELETE 来向数据库添加、修改或删除记录:

java
// 插入记录
stmt.executeUpdate("INSERT INTO users (name, age) VALUES ('Alice', 25)");

// 更新记录
stmt.executeUpdate("UPDATE users SET age = 28 WHERE name = 'Alice'");

// 删除记录
stmt.executeUpdate("DELETE FROM users WHERE name = 'Alice'");
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!