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

在现代应用中,数据库是不可或缺的一部分。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.rhkb.cn/news/4547.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.JoranConfigurator解析logbak.xml

文章目录 一、前言二、源码解析GenericXMLConfiguratorlogback.xml解析通过SaxEvent构建节点model解析model节点DefaultProcessor解析model 三、总结 一、前言 上一篇介绍了logback模块解析logback.mxl文件的入口, 我们可以手动指定logback.xml文件的位置, 也可以使用其它的名…

直连EDI与VAN:如何选择更适合企业的数据交换方式

在推进EDI项目时&#xff0c;企业通常会面临两种主要的数据交换方式选择&#xff1a;直连EDI&#xff08;Direct EDI&#xff09;和增值网络VAN&#xff08;Value Added Network&#xff09;。那么&#xff0c;它们之间有什么区别&#xff1f;为什么我们更推荐企业使用直连EDI而…

用户中心项目教程(五)---MyBatis-Plus完成后端初始化+测试方法

文章目录 1.数据库的链接和创建2.建库建表语句3.引入依赖4.yml配置文件5.添加相对路径6.实体类的书写7.Mapper接口的定义8.启动类的指定9.单元测试10运行时的bug 1.数据库的链接和创建 下面的这个就是使用的我们的IDEA链接这个里面的数据库&#xff1a; 接下来就是输入这个用户…

如何使用MaskerLogger防止敏感数据发生泄露

关于MaskerLogger MaskerLogger是一款功能强大的记录工具&#xff0c;该工具可以有效防止敏感数据泄露的发生。 MaskerLogger旨在保护目标系统的日子安全&#xff0c;此格式化程序可确保你的日志安全并防止敏感数据泄露。例如使用此格式化程序&#xff0c;打印下列数据&#x…

boss直聘 __zp_stoken__ 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 py代码 import execjs imp…

2024-春秋杯冬季赛

Misc 简单算术 题目提示异或&#xff0c;直接把开头字符 y 与 f 异或&#xff0c;得到的是不可见字符&#xff0c;base64 编码一下得到异或的字符&#xff0c;将给出的每一个字符与编码后的结果异或即可得到 flag import base64result chr((ord("y") ^ ord("…

SparkSQL函数

文章目录 1. SparkSQL函数概述2. SparkSQL内置函数2.1 常用内置函数分类2.2 常用数组函数2.2.1 array()函数1. 定义2. 语法3. 示例 2.3 常用日期与时间戳函数2.4 常见聚合函数2.5 常见窗口函数 3. SparkSQL自定义函数3.1 自定义函数分类3.2 自定义函数案例演示3.2.1 定义自定义…

Tomcat下载配置

目录 Win下载安装 Mac下载安装配置 Win 下载 直接从官网下载https://tomcat.apache.org/download-10.cgi 在圈住的位置点击下载自己想要的版本 根据自己电脑下载64位或32位zip版本 安装 Tomcat是绿色版,直接解压到自己想放的位置即可 Mac 下载 官网 https://tomcat.ap…

ent.SetDatabaseDefaults()

在 AutoCAD 的 .NET API 中&#xff0c;ent.SetDatabaseDefaults() 这句代码通常用于将一个实体&#xff08;Entity&#xff09;对象的属性设置为与其所在的数据库&#xff08;Database&#xff09;的默认设置相匹配。这意味着&#xff0c;该实体将采用数据库级别的默认颜色、图…

【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Spring bean加载的顺序探究

目录 前言例子代码和bean顺序改变全注解类加载顺序bean 的依赖关系改变&#xff0c;被依赖的先加载自定义BeanFactoryPostProssort 提前获取某个bean按照refresh的finishBeanFactoryInitialization方法改变beanBeanDefinitionRegistryPostProcessor改变beanDefinitionsConfigur…

React 中hooks之useDeferredValue用法总结

目录 概述基本用法与防抖节流的区别使用场景区分过时内容最佳实践 概述 什么是 useDeferredValue? useDeferredValue 是 React 18 引入的新 Hook&#xff0c;用于延迟更新某个不那么重要的部分。它接收一个值并返回该值的新副本&#xff0c;新副本会延迟更新。这种延迟是有…

【博客之星2024年度总评选】年度回望:我的博客之路与星光熠熠

【个人主页】Francek Chen 【人生格言】征途漫漫&#xff0c;惟有奋斗&#xff01; 【热门专栏】大数据技术基础 | 数据仓库与数据挖掘 | Python机器学习 文章目录 前言一、个人成长与盘点&#xff08;一&#xff09;机缘与开端&#xff08;二&#xff09;收获与分享 二、年度创…

R 语言科研绘图第 20 期 --- 箱线图-配对

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

支持向量机SVM的应用案例

支持向量机&#xff08;Support Vector Machine,SVM&#xff09;是一种强大的监督学习算法&#xff0c;广泛应用于分类和回归任务。 基本原理 SVM的主要目标是周到一个最优的超平面&#xff0c;该超平面能够将不同类别的数据点尽可能分开&#xff0c;并且使离该超平面最近的数…

Ubuntu 24.04 LTS 更改软件源

Ubuntu 24.04 LTS 修改软件源

wps数据分析000002

目录 一、快速定位技巧 二、快速选中技巧 全选 选中部分区域 选中部分区域&#xff08;升级版&#xff09; 三、快速移动技巧 四、快速录入技巧 五、总结 一、快速定位技巧 ctrl→&#xff08;上下左右&#xff09;快速定位光标对准单元格的上下部分双击名称单元格中…

[gdb调试] gdb调试基础实践gdb指令汇总

​ 一. 参考资料 《C/C代码调试的艺术》 二. 调试过程 1. 编译&#xff1a; 使用Debug模式编译&#xff0c;或者使用Release模式编译加入-g参数&#xff0c;-g选项会在可执行文件中加入调试信息&#xff0c;这些信息包含了程序中的变量名、函数名、行号等&#xff0c;能让…

风吹字符起,诗意Linux:一场指令与自由的浪漫邂逅(上)

文章目录 前言一. 知识过渡文件的属性与类型路径 二. 基本指令ls&#xff1a;风起草长&#xff0c;窥见世界的全貌cd&#xff1a;穿梭路径间&#xff0c;漫步荒原的远方pwd&#xff1a;定位自我&#xff0c;荒原上的坐标mkdir&#xff1a;种下希望&#xff0c;创建属于自己的世…

知识图谱中的word2vec 技术是做什么的?

Word2Vec 是一种将单词转换为向量表示的技术&#xff0c;由 Google 在 2013 年提出。这项技术的核心思想是通过大规模文本数据训练神经网络模型&#xff0c;从而将单词映射到低维稠密的向量空间中。这些向量能够捕捉到单词之间的语义和语法关系&#xff0c;使得相似或相关的单词…