Java 连接操作 MySQL 数据库(增删查改操作)

环境

  • MySQL 5.5 版本
  • eclipse
  • MySQL 连接驱动 mysql-connector-java-5.1.18-bin.jar
mysql8.0之前的版本与之后的版本使用的jar包是不同的,在使用时也有一定的区别。这里,我的 MySQL 版本为 5.5。

准备工作

将 jar 包添加到项目中,右键项目,如下,选择Configure Build Path...

 将刚才下载好的 jar 包添加进去即可

增删查改操作

  • 首先,建立一个数据库模板 DBConfig.java
注意:要提前建立一个数据库,然后在JDBC_URL中填写你自己的数据库名称 
package test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;/*** 数据库连接和关闭工具类* @author ruochen* @version 1.0*/
public class DBConfig {/** 定义数据库驱动类名称 */private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";/** 数据库连接地址 */private static final String JDBC_URL = "jdbc:mysql://127.0.0.1:3306/JavaDB?characterEncoding=utf8";/** 数据库用户名 */private static final String JDBC_USERNAME = "root";/** 数据库密码 */private static final String JDBC_PASSWORD = "root";/** 数据库连接对象 */private static Connection conn = null;/*** 获得链接* @return*/public static Connection getConnection() {try {try {// 加载驱动程序Class.forName(JDBC_DRIVER);System.out.println("加载成功");} catch (java.lang.ClassNotFoundException e) {System.out.println("ForName: " + e.getMessage());}conn = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);} catch (Exception e) {e.printStackTrace();}return conn;}public static void closeConnection(ResultSet rs, Statement ps, Connection conn) {try {if (null != rs) {rs.close();}if (null != ps) {ps.close();}if (null != conn) {conn.close();}} catch (Exception e) {System.out.println("Close connection error");e.printStackTrace();}}
}
  • 建表操作 CreateTest.jav
package test;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;/*** JDBC链接数据库,创建数据表 * @author ruochen* @version 1.0*/
public class CreateTest {public static void main(String[] args) {Connection conn = DBConfig.getConnection();try {Statement st = conn.createStatement();ResultSet re = conn.getMetaData().getTables(null, null, "student", null);if (re.next()) {System.out.println("表已经存在");} else {// 建表语句String sql = "create table student ( "+ "id char(10),"+ "name char(16),"+ "score integer" + ")";st.executeUpdate(sql);System.out.println("创建成功");}DBConfig.closeConnection(re, st, conn);} catch (SQLException e) {System.out.println("SQLException: " + e.getMessage());}}}
加载成功
创建成功

 

插入操作 InsertTest.java

package test;import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;/*** 数据表中插入数据 * @author ruochen* @version 1.0*/
public class InsertTest {public static void main(String[] args) {Connection conn = DBConfig.getConnection();try {Statement st = conn.createStatement();String r1 = "insert into student values('0001', '小王', 80)";String r2 = "insert into student values('0002', '小李', 82)";String r3 = "insert into student values('0003', '小张', 90)";st.executeUpdate(r1);st.executeUpdate(r2);st.executeUpdate(r3);System.out.println("插入成功");DBConfig.closeConnection(null, st, conn);} catch (SQLException e) {e.printStackTrace();}}
}
加载成功
插入成功

 更新操作 UpdateTest.java

package test;import java.sql.Connection;
import java.sql.PreparedStatement;/*** 更新数据库操作 * @author ruochen* @version 1.0*/
public class UpdateTest {public static void main(String[] args) {Connection conn = DBConfig.getConnection();String[] id = {"0002", "0003"};int[] score = {70, 60};PreparedStatement ps;try {ps = conn.prepareStatement("Update student set score=? where id=?");int i = 0, idlen = id.length;do {ps.setInt(1, score[i]);ps.setString(2, id[i]);ps.executeUpdate();System.out.println("修改成功");++i;} while (i < idlen);DBConfig.closeConnection(null, ps, conn);} catch (Exception e) {e.printStackTrace();}}
}
加载成功
修改成功
修改成功

 删除、查询操作 SearchTest.java

package test;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;/*** 删除、查询数据库操作* @author ruochen* @version 1.0*/
public class SearchTest {public static void main(String[] args) {Connection conn = DBConfig.getConnection();try {Statement st = conn.createStatement(); PreparedStatement ps = conn.prepareStatement("delete from student where id=?");ps.setString(1, "0002");ps.executeUpdate();System.out.println("删除成功");ResultSet rs = st.executeQuery("select * from student");while (rs.next()) {System.out.println(rs.getString("id") + "\t"+ rs.getString("name") + "\t" + rs.getShort("score"));}st.close();DBConfig.closeConnection(rs, ps, conn);} catch (Exception e) {e.printStackTrace();}}}
加载成功
删除成功
0001	小王	80
0003	小张	60

在Java与MySQL数据库的交响乐中,我们已经编织了一幅连接与交互的复杂图景。想象一下,Java应用程序如同一位指挥家,挥舞着JDBC的指挥棒,精准地引导着数据流在应用程序与数据库之间穿梭。每一个Connection对象都是一根弦,每一个StatementPreparedStatement都是一段旋律,而ResultSet则是那令人心醉的乐章。

然而,这段旅程并非总是风平浪静。偶尔,数据库连接可能会因为网络波动或服务器负载而断开。这时,try-catch块就像一位经验丰富的调音师,迅速捕捉到异常并优雅地处理它们,确保应用程序的流畅运行。连接池技术则如同一位精明的经理,优化资源分配,减少延迟,提升性能。

在编写Java代码以连接MySQL时,我们不仅需要关注功能的实现,更要注重代码的可维护性和可扩展性。通过使用配置文件来管理数据库连接参数,我们使得应用程序更加灵活,能够轻松适应不同的环境。通过采用面向接口的编程,我们使得代码更加模块化,易于测试和重用。

随着技术的不断进步,Java与MySQL的连接方式也在不断演进。从传统的JDBC到现代的ORM框架,如Hibernate和MyBatis,我们有了更多的工具和选择来简化数据库操作,提高开发效率。这些框架如同一位位技艺高超的工匠,将繁琐的数据库操作转化为简洁而强大的API。

在结束这段关于Java连接MySQL的讨论时,让我们铭记,技术的世界没有终点,只有不断前进的旅程。每一次代码的编写和调试,都是我们与数据库世界对话的一部分。通过不断学习和实践,我们不仅能够解决当前面临的技术挑战,还能够预见并应对未来可能出现的问题,为组织的数字化转型和业务增长提供坚实的支持。

所以,让我们继续在Java与MySQL的广阔天地中探索,用我们的智慧和热情,书写连接与交互的辉煌篇章。记住,技术的世界永远欢迎那些勇于探索、不断创新的灵魂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/8903.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

STL---迭代器

本文来源&#xff1a;《C语言程序设计》第10章 理解迭代器对于理解STL框架并掌握STL的使用至关重要。 迭代器是泛化的指针&#xff0c;STL算法利用迭代器对存储在容器中的元素序列进行遍历&#xff0c;迭代器提供了访问容器中每个元素的方法。 虽然指针也是一种迭代器&#…

TSMI252012PMX-3R3MT功率电感详细解析

TSMI252012PMX-3R3MT功率电感详细解析 一、引言 在现代电子设备的不断小型化和高性能化的趋势下&#xff0c;功率电感作为电路中的关键元件&#xff0c;其性能的好坏直接影响到整个电路的稳定性和效率。TSMI252012PMX-3R3MT作为深圳市时源芯微科技有限公司&#xff08;TimeSo…

Ubuntu22.04安装DataEase

看到DataEase的驾驶舱&#xff0c;感觉比PowerBI要好用一点&#xff0c;于是搭建起来玩玩。Dataease推荐的操作系统是Ubuntu22.04/Centos 7。 下载了Ubuntu22.04和DataEase 最新版本的离线安装包 一.安装ubuntu22.04 在安装的时候&#xff0c;没有顺手设置IP地址信息&#xff…

OpenEuler 下 Docker 安装、配置与测试实例

文章目录 前言1. 环境准备2. 下载 Docker3.配置服务文件4.配置加速器加速下载docker镜像5. 验证 Docker 安装 前言 Docker 安装大致分为包管理器安装、脚本安装、离线手动安装、容器编排工具安装、桌面版安装等&#xff0c;每种安装各有特点&#xff0c;但涉及知识面不少&…

wordpress实用功能A5资源网同款 隐藏下载框 支付框 需要登录才能查看隐藏的内容

实用功能 隐藏下载框 支付框 需要登录才能查看隐藏的内容, 个人网站防天朝申查实测有效 。 登录前&#xff0c;未登录&#xff1a; 登录后&#xff0c;已登录&#xff1a; 功能说明 该代码段的主要功能是隐藏支付框并为未 登录用户显示一条提示信息&#xff0c;告知他们需要…

C 语言学习-05【数组】

1、一维数组元素的操作 输入一个数&#xff0c;按原来排序的规律将它插入到一个一排列好的数组中&#xff1a; #include <stdio.h>int main() {int i, data, a[10] {2, 3, 6, 9, 11, 12, 14, 17, 19};printf("Primitive series: \n");for (i 0; i < 9; i)…

H5移动端预览PDF方法

新建页面 新建一个页面以便去预览对应的pdf 新建完后在 pages.json 文件内去新增对应路由 页面内容 <template><view class"page"><view class"pdf"><view id"demo"></view></view><view class"b…

嵌入式学习(11)-WS2812灯珠

WS2812的级联控制协议非常简单。通过一根信号线就可以进行串行异步信号发送。 下面显示了四个WS2812通过数据性级联的方式。在串行通讯中使用不同高低电平脉冲表示数据0,1编码。 使用GPIO模拟时序时&#xff1a;GPIO的驱动频率大约是1MHz 硬件电路&#xff1a; 软件代码实现&…

流类库与输入输出

来源&#xff1a;《C语言程序设计》 像C语言一样&#xff0c;C语言也没有输入输出语句。 但C标准库中有一个面向对象的输入输出软件包&#xff0c;即I/O流类库。 流是I/O流类的中心概念。 ------ I/O流类库是C语言中I/O函数在面向对象的程序设计方法中的一个替换产品。 -…

RK3288 android7.1 适配 ilitek i2c接口TP

一&#xff0c;Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器&#xff0c;如 ILI6480、ILI9341 等&#xff0c;采用 I2C 接口。 这些控制器能够支持多点触控&#xff0c;并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&am…

【AI写作宝-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

一文熟悉新版llama.cpp使用并本地部署LLAMA

0. 简介 最近是快到双十一了再给大家上点干货。去年我们写了一个大模型的系列&#xff0c;经过一年&#xff0c;大模型的发展已经日新月异。这一次我们来看一下使用llama.cpp这个项目&#xff0c;其主要解决的是推理过程中的性能问题。主要有两点优化&#xff1a; llama.cpp …

安全、高效、有序的隧道照明能源管理解决方案

徐悦 &#xff08;安科瑞电气股份有限公司 上海嘉定201801&#xff09; 前言 双碳数字化能源管理对高速公路来说是个新鲜事。今年的中央经济工作会议提出&#xff1a;将“做好碳达峰、碳中和工作”作为2021年的任务之一&#xff0c;而我国高速公路里程15.5万公里&#xff0c;…

Navigating Net 算法简介

0. Inro \textbf{0. Inro} 0. Inro 1️⃣一些要用到的符号 ( U , dist ⁡ ) (U, \operatorname{dist}) (U,dist)为基础度量空间&#xff0c; S ⊆ U S \subseteq U S⊆U为包含 n ≥ 2 n \geq 2 n≥2个对象的 Input \text{Input} Input​ h ⌈ log ⁡ 2 diam ⁡ ( S ) ⌉ h\lef…

flutter 语法糖库 flutter_magic 发布 1.0.1

众所周知&#xff0c;flutter 是一款由谷歌开发的跨平台工具&#xff0c;一直在开发者心中久负盛名。 但是语法死亡嵌套是个诟病。 最近有 flutter 开发者 panjing&#xff0c;发布了 flutter 语法精简库&#xff0c;flutter_magic&#xff0c;可以让语法变成类似 swiftui 一…

【日志】392.判断子序列

2024.11.8 【力扣刷题】 392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 整个题从一开始就是打算从双指针的思想往下走的。但是&#xff0c;我设置了四个变量sLeft…

07 Lambda和StreamAPI

目录 1.Lambda表达式 语法格式&#xff1a; 简单示例 2.函数式接口 常见的函数式接口 1. Supplier 2. Consumer 3. Function,> 4. Predicate 总结 3.流式编程——StreamAPI 基本概念 常见的 Stream 操作 1. 创建 Stream 2. 中间操作 3. 终端操作 简单练习 …

TMDOG的Gin学习笔记_02——Gin集成支付宝支付沙箱环境

TMDOG的Gin学习笔记_02——Gin集成支付宝支付沙箱环境 博客地址&#xff1a;TMDOG的博客 作者自述&#xff1a; 最近忙着整理自己的项目代码&#xff0c;终于有时间更新一下博客。这次的内容是关于如何在Gin框架下集成支付宝的支付沙箱环境&#xff0c;具体包括如何初始化支付…

Docker网络概述

1. Docker 网络概述 1.1 网络组件 Docker网络的核心组件包括网络驱动程序、网络、容器以及IP地址管理&#xff08;IPAM&#xff09;。这些组件共同工作&#xff0c;为容器提供网络连接和通信能力。 网络驱动程序&#xff1a;Docker支持多种网络驱动程序&#xff0c;每种驱动程…

OpenHarmony4.1蓝牙芯片如何适配?触觉智能RK3568主板SBC3568演示

当打开蓝牙后没有反应时&#xff0c;需要排查蓝牙节点是否对应、固件是否加载成功&#xff0c;本文介绍开源鸿蒙OpenHarmony4.1系统下适配蓝牙的方法&#xff0c;触觉智能SBC3568主板演示 修改对应节点 开发板蓝牙硬件连接为UART1&#xff0c;修改对应的节点&#xff0c;路径为…