MySQL 篇 - Java 连接 MySQL 数据库并实现数据交互

news/2025/1/18 13:57:27/

在现代应用中,数据库是不可或缺的一部分。Java 作为一种广泛使用的编程语言,提供了丰富的 API 来与各种数据库进行交互。本文将详细介绍如何在 Java 中连接 MySQL 数据库,并实现基本的数据交互功能。

一、环境准备

1.1 安装 MySQL

首先,确保你已经安装了 MySQL 数据库。可以通过 MySQL 官网 下载并安装适合你操作系统的版本。

1.2 创建数据库和表

在安装完成后,登录 MySQL 命令行工具,创建一个名为 test_db数据库,并在其中创建一个名为 users 的表:

CREATE DATABASE test_db;USE test_db;CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL
);
1.3 添加 MySQL Connector/J 依赖

在 Java 项目中,你需要添加 MySQL Connector/J 作为依赖。如果你使用 Maven,可以在 pom.xml 中添加如下依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version> <!-- 请根据最新版本更新 -->
</dependency>

二、Java 代码实现

2.1 创建数据库连接

接下来,在 Java 代码中实现与 MySQL 数据库的连接。以下是一个简单的连接示例:

package com.example.demo;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class MySQLConnection {private static final String URL = "jdbc:mysql://localhost:3306/test_db"; // 数据库地址private static final String USER = "root"; // 数据库用户名private static final String PASSWORD = "your_password"; // 数据库密码public static Connection getConnection() {Connection connection = null;try {// 加载 JDBC 驱动Class.forName("com.mysql.cj.jdbc.Driver");// 获取数据库连接connection = DriverManager.getConnection(URL, USER, PASSWORD);System.out.println("数据库连接成功!");} catch (ClassNotFoundException e) {System.out.println("找不到 JDBC 驱动!" + e.getMessage());} catch (SQLException e) {System.out.println("数据库连接失败!" + e.getMessage());}return connection;}
}
2.2 插入数据

接下来,我们编写一个方法来插入用户数据到 users 表中:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class UserDAO {public void addUser(String username, String password) {String sql = "INSERT INTO users (username, password) VALUES (?, ?)";try (Connection connection = MySQLConnection.getConnection();PreparedStatement preparedStatement = connection.prepareStatement(sql)) {preparedStatement.setString(1, username);preparedStatement.setString(2, password);int rowsAffected = preparedStatement.executeUpdate();System.out.println("成功插入 " + rowsAffected + " 行数据。");} catch (SQLException e) {System.out.println("插入数据失败!" + e.getMessage());}}
}
2.3 查询数据

下面是一个查询用户数据的方法:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class UserDAO {// 其他代码...public void getAllUsers() {String sql = "SELECT * FROM users";try (Connection connection = MySQLConnection.getConnection();PreparedStatement preparedStatement = connection.prepareStatement(sql);ResultSet resultSet = preparedStatement.executeQuery()) {while (resultSet.next()) {int id = resultSet.getInt("id");String username = resultSet.getString("username");String password = resultSet.getString("password");System.out.println("用户ID: " + id + ", 用户名: " + username + ", 密码: " + password);}} catch (SQLException e) {System.out.println("查询数据失败!" + e.getMessage());}}
}
2.4 更新数据

更新用户信息的方法如下:

public class UserDAO {// 其他代码...public void updateUserPassword(int id, String newPassword) {String sql = "UPDATE users SET password = ? WHERE id = ?";try (Connection connection = MySQLConnection.getConnection();PreparedStatement preparedStatement = connection.prepareStatement(sql)) {preparedStatement.setString(1, newPassword);preparedStatement.setInt(2, id);int rowsAffected = preparedStatement.executeUpdate();System.out.println("成功更新 " + rowsAffected + " 行数据。");} catch (SQLException e) {System.out.println("更新数据失败!" + e.getMessage());}}
}
2.5 删除数据

删除用户数据的方法如下:

public class UserDAO {// 其他代码...public void deleteUser(int id) {String sql = "DELETE FROM users WHERE id = ?";try (Connection connection = MySQLConnection.getConnection();PreparedStatement preparedStatement = connection.prepareStatement(sql)) {preparedStatement.setInt(1, id);int rowsAffected = preparedStatement.executeUpdate();System.out.println("成功删除 " + rowsAffected + " 行数据。");} catch (SQLException e) {System.out.println("删除数据失败!" + e.getMessage());}}
}

三、测试代码

在主程序中测试上述功能,创建 Main 类并添加如下代码:

public class Main {public static void main(String[] args) {UserDAO userDAO = new UserDAO();// 插入用户userDAO.addUser("john_doe", "password123");// 查询用户userDAO.getAllUsers();// 更新用户密码userDAO.updateUserPassword(1, "new_password");// 查询用户userDAO.getAllUsers();// 删除用户userDAO.deleteUser(1);// 查询用户userDAO.getAllUsers();}
}

四、总结

通过本文的介绍,你已经学会了如何在 Java 中连接 MySQL 数据库并实现数据交互。主要内容包括:

  • 数据库连接:使用 JDBC 连接 MySQL 数据库
  • 数据操作:实现插入、查询、更新和删除(CRUD)操作。
  • 最佳实践:使用 PreparedStatement 避免 SQL 注入。

在实际应用中,建议使用连接池(如 HikariCP 或 DBCP)来提高性能和资源利用率。同时,可以考虑使用 ORM 框架(如 Hibernate 或 MyBatis)来简化数据库操作,提高开发效率。希望本文能帮助你快速上手 Java 与 MySQL 的数据交互!


http://www.ppmy.cn/news/1564166.html

相关文章

大语言模型训练的基本步骤解析

一、引言 大语言模型&#xff08;LLMs&#xff09;在当今人工智能领域取得了令人瞩目的成就&#xff0c;从智能聊天机器人到文本生成、语言翻译等广泛应用&#xff0c;深刻改变着人们与信息交互的方式。这些模型展现出强大的语言理解和生成能力背后&#xff0c;是一套复杂而精妙…

【OpenCV(C++)快速入门】--opencv学习

0 配置环境 配置环境网上很多资料&#xff0c;这里就不赘述了。 笔者使用的是VS2022opencv4.9.0 测试配置环境 // 打开摄像头样例 #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/imgcodecs/imgcod…

网络安全中攻击溯源有哪些方法?

目前网络攻击已经成为常见的安全威胁之一&#xff0c;其造成的危害和损失都是不可估量的&#xff0c;因此网络攻击受到了高度重视。而当我们遭遇网络攻击时&#xff0c;攻击溯源是一项非常重要的工作&#xff0c;可以帮助我们迅速发现并应对各类网络攻击行为&#xff0c;那么网…

Python基本概念与实践

Python语言&#xff0c;总给我一种“嗯&#xff1f;还能这么玩儿&#xff1f;”的感觉 Python像一个二三十岁的年轻人&#xff0c;自由、年轻、又灵活 欢迎一起进入Python的世界~ 本人工作中经常使用Python&#xff0c;针对一些常用的语法概念进行持续记录。 一、类与常见数据结…

《机器学习》——SVD(奇异分解)降维

文章目录 SVD基本定义SVD降维的步骤SVD降维使用场景SVD 降维的优缺点SVD降维实例导入所需库定义SVD降维函数导入图像处理图像处理图像打印降维结果并显示处理后两个图像的对比图 SVD基本定义 简单来说就是&#xff0c;通过SVD&#xff08;奇异值分解&#xff09;对矩阵数据进行…

vulnhub靶场【Raven系列】之2 ,对于mysql udf提权的复习

前言 靶机&#xff1a;Raven-2&#xff0c;IP地址为192.168.10.9 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用虚拟机&#xff0c;网卡为桥接模式 文章所用靶机来自vulnhub&#xff0c;可通过官网下载&#xff0c;或者通过链接:https://pan.quark.cn/s/a65…

Java中 try-with-resources 自动关闭资源的使用

目录 前言 一、基本概念 二、语法 三、使用方法与代码示例 示例 1&#xff1a;使用 try-with-resources 读取文件 示例 2&#xff1a;多个资源的管理 四、注意事项 五、优缺点 优点 缺点 六、总结 前言 在 Java 开发中&#xff0c;资源管理是一个非…

【Flink系列】6. Flink中的时间和窗口

6. Flink中的时间和窗口 在批处理统计中&#xff0c;我们可以等待一批数据都到齐后&#xff0c;统一处理。但是在实时处理统计中&#xff0c;我们是来一条就得处理一条&#xff0c;那么我们怎么统计最近一段时间内的数据呢&#xff1f;引入“窗口”。 所谓的“窗口”&#xff…