使用 JDBC 实现 Java 数据库操作

简介: JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。

 目录

一、JDBC 简介

二、JDBC 环境准备

1. 添加 JDBC 驱动

2. 创建数据库

三、JDBC 编程步骤

1. 加载数据库驱动

2. 获取数据库连接

3. 创建 Statement 对象并执行 SQL

4. 使用 PreparedStatement 防止 SQL 注入

5. 事务管理

6. 异常处理和关闭资源

四、完整示例


JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,它允许 Java 程序通过 SQL 语句与数据库进行交互。通过 JDBC,开发者能够实现常见的数据库操作,如增、删、改、查等。在这篇文章中,我们将深入探讨如何使用 JDBC 连接数据库,并执行各种常见的数据库操作。

一、JDBC 简介

JDBC 是 Java 语言提供的标准接口,允许开发者与各种关系型数据库系统(如 MySQL、Oracle、SQL Server 等)进行交互。JDBC 本质上是一组 Java API,它定义了如何执行 SQL 语句、更新数据、查询结果等操作。

在 JDBC 中,我们主要通过以下几个步骤进行数据库操作:

  1. 加载数据库驱动:通过 Class.forName() 或使用数据源自动加载数据库驱动。
  2. 建立连接:使用 DriverManager.getConnection() 获取数据库连接。
  3. 执行 SQL 语句:使用 StatementPreparedStatement 执行 SQL 语句。
  4. 处理结果集:通过 ResultSet 处理查询结果。
  5. 关闭资源:关闭 ConnectionStatementResultSet 等资源。

二、JDBC 环境准备

1. 添加 JDBC 驱动

首先,确保在你的 Java 项目中添加了适合你所使用数据库的 JDBC 驱动。如果你使用的是 Maven 构建工具,可以在 pom.xml 文件中加入依赖:

对于 MySQL 数据库:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

image.gif

对于 Oracle 数据库,可能需要下载 .jar 文件并手动添加到项目的 lib 目录中。

2. 创建数据库

假设我们使用 MySQL 数据库,首先在数据库中创建一个简单的表 users,该表包含 idnameage 三个字段。你可以通过以下 SQL 语句创建数据库和表:

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT NOT NULL
);
INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25), ('Charlie', 35);

image.gif

三、JDBC 编程步骤

1. 加载数据库驱动

在 Java 中连接数据库时,首先需要加载数据库驱动。在 JDBC 中,我们可以通过 Class.forName() 方法加载驱动类。对于 MySQL 数据库,驱动类是 com.mysql.cj.jdbc.Driver

try {
    Class.forName("com.mysql.cj.jdbc.Driver");  // 加载 MySQL 驱动
    System.out.println("数据库驱动加载成功");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
    System.out.println("数据库驱动加载失败");
}

image.gif

2. 获取数据库连接

连接数据库是通过 DriverManager.getConnection() 方法实现的。在获取连接时,我们需要提供数据库的 URL、用户名和密码。连接 URL 的格式通常如下:

jdbc:mysql://localhost:3306/testdb

代码示例:

String url = "jdbc:mysql://localhost:3306/testdb";
String user = "root";  // 数据库用户名
String password = "password";  // 数据库密码
Connection conn = null;
try {
    conn = DriverManager.getConnection(url, user, password);
    System.out.println("数据库连接成功");
} catch (SQLException e) {
    e.printStackTrace();
    System.out.println("数据库连接失败");
}

image.gif

3. 创建 Statement 对象并执行 SQL

一旦获得数据库连接,就可以通过 Connection 对象创建 StatementPreparedStatement 来执行 SQL 语句。我们来看一个查询操作的例子,查询 users 表中的所有用户信息:

String query = "SELECT * FROM users";
Statement stmt = null;
ResultSet rs = null;
try {
    stmt = conn.createStatement();
    rs = stmt.executeQuery(query);
    while (rs.next()) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        int age = rs.getInt("age");
        System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    // 关闭资源
    try {
        if (rs != null) rs.close();
        if (stmt != null) stmt.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

image.gif

4. 使用 PreparedStatement 防止 SQL 注入

PreparedStatementStatement 的一种增强版,它可以提高执行效率并防止 SQL 注入。在执行带参数的 SQL 语句时,应该优先使用 PreparedStatement

例如,插入一个新用户的 SQL 语句:

String insertQuery = "INSERT INTO users (name, age) VALUES (?, ?)";
PreparedStatement pstmt = null;
try {
    pstmt = conn.prepareStatement(insertQuery);
    pstmt.setString(1, "David");  // 设置第一个参数为 "David"
    pstmt.setInt(2, 40);  // 设置第二个参数为 40
    int rowsAffected = pstmt.executeUpdate();
    System.out.println("插入成功,受影响的行数:" + rowsAffected);
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    try {
        if (pstmt != null) pstmt.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

image.gif

5. 事务管理

在 JDBC 中,可以使用事务来确保多个数据库操作的原子性。默认情况下,JDBC 使用自动提交模式,但你可以禁用自动提交来手动管理事务。以下是一个使用事务的示例:

try {
    conn.setAutoCommit(false);  // 禁用自动提交
    String updateQuery1 = "UPDATE users SET age = 26 WHERE name = 'Bob'";
    String updateQuery2 = "UPDATE users SET age = 36 WHERE name = 'Charlie'";
    stmt = conn.createStatement();
    stmt.executeUpdate(updateQuery1);
    stmt.executeUpdate(updateQuery2);
    conn.commit();  // 提交事务
    System.out.println("事务提交成功");
} catch (SQLException e) {
    try {
        if (conn != null) {
            conn.rollback();  // 回滚事务
            System.out.println("事务回滚");
        }
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
    e.printStackTrace();
} finally {
    try {
        if (stmt != null) stmt.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

image.gif

6. 异常处理和关闭资源

在 JDBC 编程中,异常处理非常重要,因为数据库操作可能会出现各种问题。我们可以使用 try-catch-finally 块来确保资源得到正确释放。所有的数据库连接、StatementResultSet 都应该在使用完毕后关闭。

四、完整示例

下面是一个完整的 JDBC 示例程序,包括连接数据库、查询、插入、更新、删除操作:

import java.sql.*;
public class JDBCExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "password";
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement();
            // 查询操作
            String query = "SELECT * FROM users";
            rs = stmt.executeQuery(query);
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Age: " + rs.getInt("age"));
            }
            // 插入操作
            String insertQuery = "INSERT INTO users (name, age) VALUES ('Eve', 28)";
            stmt.executeUpdate(insertQuery);
            // 更新操作
            String updateQuery = "UPDATE users SET age = 29 WHERE name = 'Eve'";
            stmt.executeUpdate(updateQuery);
            // 删除操作
            String deleteQuery = "DELETE FROM users WHERE name = 'Eve'";
            stmt.executeUpdate(deleteQuery);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

image.gif


相关文章
|
13天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
阿里云与企业共筑容器供应链安全
171328 12
|
15天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
150294 32
|
23天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201959 14
对话 | ECS如何构筑企业上云的第一道安全防线
|
5天前
|
存储 人工智能 安全
对话|无影如何助力企业构建办公安全防护体系
阿里云无影助力企业构建办公安全防护体系
1251 8
|
1天前
|
机器学习/深度学习 自然语言处理 PyTorch
深入剖析Transformer架构中的多头注意力机制
多头注意力机制(Multi-Head Attention)是Transformer模型中的核心组件,通过并行运行多个独立的注意力机制,捕捉输入序列中不同子空间的语义关联。每个“头”独立处理Query、Key和Value矩阵,经过缩放点积注意力运算后,所有头的输出被拼接并通过线性层融合,最终生成更全面的表示。多头注意力不仅增强了模型对复杂依赖关系的理解,还在自然语言处理任务如机器翻译和阅读理解中表现出色。通过多头自注意力机制,模型在同一序列内部进行多角度的注意力计算,进一步提升了表达能力和泛化性能。
|
6天前
|
人工智能 自然语言处理 程序员
通义灵码2.0全新升级,AI程序员全面开放使用
通义灵码2.0来了,成为全球首个同时上线JetBrains和VSCode的AI 程序员产品!立即下载更新最新插件使用。
1260 23
|
8天前
|
机器学习/深度学习 自然语言处理 搜索推荐
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
|
6天前
|
消息中间件 人工智能 运维
1月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
506 21
1月更文特别场——寻找用云高手,分享云&AI实践
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
|
11天前
|
人工智能 自然语言处理 API
阿里云百炼xWaytoAGI共学课DAY1 - 必须了解的企业级AI应用开发知识点
本课程旨在介绍阿里云百炼大模型平台的核心功能和应用场景,帮助开发者和技术小白快速上手,体验AI的强大能力,并探索企业级AI应用开发的可能性。

热门文章

最新文章