使用Java增删改查数据库
文章目录
- 前言
- 一、PrepareStatement类是什么?
- 二、实操展示
- 1.增
- 2.删
- 3.改
- 4.查
- 总结
前言
既然连接数据库都可以通过java语言实现,那么通过java语言对数据库进行增删改查的操作自然是顺理成章的事情了。
一、PrepareStatement类是什么?
PrepareStatement类是Java JDBC API中的一个类,用于执行预编译的SQL语句。这个类实现java语言增删改查数据库的功能。它是Statement的子接口,提供了更高级别和更灵活的功能。(所以在编译SQL语句的时候,不要使用Statement类,直接使用它的子接口吧!)
通过使用PrepareStatement类,可以先将SQL语句发送到数据库进行编译,然后可以重复执行该语句,并且可以使用参数化查询和批处理等高级功能。
PrepareStatement类可以防止SQL注入攻击,提高性能,并且可以方便地处理不同类型的数据。
SQL注入攻击,以statement类为例,当使用Statement对象执行动态拼接SQL语句时,如果不对用户输入进行正确的过滤和转义,攻击者可以通过构造恶意的“密码"进行输入来修改或执行未经授权的SQL语句。(利用转义漏洞,绕过了账号密码,直接访问并可以攻击数据)
PrepareStatement的构造方法:
connection.PrepareStatement(String sql);
//创建一个新的PrepareStatement对象,以指定的SQL语句初始化。connection.PrepareStatement(String sql, int autoGeneratedKeys);
//创建一个新的PrepareStatement对象,以指定的SQL语句和生成的键标志初始化。connection.PrepareStatement(String sql, int[] columnIndexes);
//创建一个新的PrepareStatement对象,以指定的SQL语句和列索引标志初始化。connection.PrepareStatement(String sql, String[] columnNames);
//创建一个新的PrepareStatement对象,以指定的SQL语句和列名标志初始化。
PrepareStatement类是没有直接的构造方法的,但是可以通过Connection对象调用PrepareStatement()方法来创建自己的对象。第一个方法是最经常使用的,其他的想忽略也行。
| 方法 | 功能描述 | 返回值 |
| setNull(int parameterIndex, int sqlType) | 将指定的参数设置为SQL NULL | void |
| setBoolean(int parameterIndex, boolean x) | 将指定参数设置为给定的Java布尔值 | void |
| setByte(int parameterIndex, byte x) | 将指定参数设置为给定的Java字节值 | void |
| setShort(int parameterIndex, short x) | 将指定参数设置为给定的Java short值 | void |
| setInt(int parameterIndex, int x) | 将指定参数设置为给定的Java int值 | void |
| setLong(int parameterIndex, long x) | 将指定参数设置为给定的Java long值 | void |
| setFloat(int parameterIndex, float x) | 将指定参数设置为给定的Java float值 | void |
| setDouble(int parameterIndex, double x) | 将指定参数设置为给定的Java double值 | void |
| setBigDecimal(int parameterIndex, BigDecimal x) | 将指定参数设置为给定的Java BigDecimal值 | void |
| setString(int parameterIndex, String x) | 将指定参数设置为给定的Java String值 | void |
| setBytes(int parameterIndex, byte[] x) | 将指定参数设置为给定的Java 字节数组 | void |
| setDate(int parameterIndex, Date x) | 将指定参数设置为给定的SQL date值 | void |
| setTime(int parameterIndex, Time x) | 将指定的参数设置为给定的SQL时间戳值 | void |
| setObject(int parameterIndex, Object x) | 将指定参数设置为给定的Java Object对象 | void |
| executeQuery() | 执行这个PreparedStatement对象中的SQL查询,并返回查询生成的ResultSet对象 | ResultSet |
| executeUpdate() | 执行这个PreparedStatement对象中的SQL语句(可能是INSERT、UPDATE或DELETE语句),并返回受影响行的计数 | int |
| execute() | 执行这个PreparedStatement对象中的SQL语句,它可能返回多个结果 | boolean |
| clearParameters() | 清除PreparedStatement对象中的当前参数值 | void |
| setArray(int parameterIndex, Array x) | 将指定参数设置为给定的SQL Array对象 | void |
| setBlob(int parameterIndex, Blob x) | 将指定参数设置为给定的SQL Blob对象 | void |
| setClob(int parameterIndex, Clob x) | 将指定参数设置为给定的SQL Clob对象 | void |
使用以上PrepareStatement的方法就可以实现对数据库的增删改查的功能了。
PrepareStatement类比Statement类多一个预处理的功能,需要使用到通配符" ? "(也正是该功能减轻了SQL注入攻击)
所以,PrepareStatement实例化时的String数据的SQL语句时不完整的,需要将通配符替换掉,才能进行使用,这和格式化输出语句的道理一样。
在上面常用方法的表格中,最常见的是set()方法,尽管数据类型不同,但第一个参数:int parameterIndex 该参数都是指在String字符串中编写SQL语句的第几个通配符,然后这个在SQL语句中的问号( ? )可以被你设置的第二个数据类型替代,SQL语句被补全了,可以进行下一步执行运行的操作了。
二、实操展示
以下的所有操作都建立在连接好数据库之后,对连接框架的代码进行了省略。
增删改查的操作步骤大致都是("查"需要循环输出语句反馈到控制台):
第一步,创建String对象,编写SQL语句。
第二步,利用connection对象调用方法创建PrepareStatement对象。
第三步,使用PrepareStatement类的set()方法,补全SQL语句中的通配符。
最后一步,调用PrepareStatement类的executeUpdate()方法执行该SQL语句。
executeUpdate()方法执行后,Java代码会将SQL语句发送给MySQL数据库,并执行相应的操作,如插入、更新或删除数据。执行完毕后,MySQL数据库会返回操作的结果,Java代码可以通过executeUpdate()方法获取到受影响的行数。
1.增
实操展示:
这是数据库表单原本的样子:

这个table只有三行,需求:添加一个id是104,name是小浩的数据。
主要代码:
String sql = "INSERT INTO table_name (id, name) VALUES (?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, 104);
statement.setString(2, "小浩");
statement.executeUpdate();
运行结果:
如上图所示,刷新Workbench,实时显示出了数据库内容的更新。
2.删
实操展示:
这是数据库表单原本的样子:

需求:删除一个id是103,name是小张的数据。
主要代码:
String sql = "DELETE FROM test_table WHERE id = ? AND name = ?";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 103);
statement.setString(2, "小张");
statement.executeUpdate();
运行结果:

如上图所示,数据库表单的id=103,name=小张的这一串数据已被删除。
3.改
实操展示:
这是数据库表单原本的样子:

需求:将id=104 name=小王的这一串数据里,id值修改为103。
主要代码:
String sql = "UPDATE test_table SET id= ? WHERE id = ? ";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 103);
statement.setInt(2, 104);
statement.executeUpdate();
运行结果:

如上图所示,数据库中小浩的id由104更改为了103。
4.查
这是数据库表单原本的样子:

需求:查询id为101的用户的name值是什么。
主要代码:
String sql = "SELECT name FROM test_table WHERE id = ? ";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 101);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {// 处理查询结果String value1 = resultSet.getString("name");System.out.println("查询结果:id值为101的用户名称是 "+value1);
}
运行结果:

对比数据库的信息:

如上面两张图显示,通过PrepareStatement类可以轻松实现java后端与数据库之间的互通。
总结
以上就是使用java的PrepareStatement类对数据库进行增删改查的操作,本文初步介绍了java的使用,没有写关于SQL语句之类的数据库知识,有补充或指正的地方,欢迎在评论区中留言。
相关文章:
使用Java增删改查数据库
文章目录 前言一、PrepareStatement类是什么?二、实操展示 1.增2.删3.改4.查总结 前言 既然连接数据库都可以通过java语言实现,那么通过java语言对数据库进行增删改查的操作自然是顺理成章的事情了。 一、PrepareStatement类是什么? PrepareS…...
NAND发货量增长放缓,2024 Q2营收增长14%
根据市场研究机构TrendForce Corp.于2024年9月9日发布的报告,2024年第二季度NAND闪存发货量增长放缓,但营收增长了14%,主要受人工智能(AI)固态硬盘(SSD)需求的推动。 NAND闪存市场概况 2024年…...
2024年9月13日 十二生肖 今日运势
小运播报:2024年9月13日,星期五,农历八月十一 (甲辰年癸酉月庚辰日),法定工作日。 红榜生肖:猴、鼠、鸡 需要注意:牛、兔、狗 喜神方位:西北方 财神方位:…...
Maven 常见问题以及常用命令
常见问题 : 1. 识别不了maven项目 mvn clean install -Dmaven.test.skiptrue //构建 2. 打jar包时报异常 指定下jdk版本 常用命令: mvn clean mvn package mvn install mvn deploy...
自定义分区
通过简单例子了解partition分区类的重写方法 分区是在MR的过程中进行的,属于Shuffle阶段 但是在Job端不要忘记进行调用:job.setPartitionerClass(xxx.class) 按照年龄分区: class AgePartitioner extends Partitioner<MyComparable, N…...
计算机三级 - 数据库技术 - 第十四章 数据仓库与数据挖掘 笔记
第十四章 数据仓库与数据挖掘 内容提要: 了解数据仓库相关技术了解数据仓库的设计、建造、运行及维护了解OLAP及多维数据模型了解数据挖掘技术 决策支持系统(DSS):综合利用大量数据有机组合众多模型(数学模型和数据处理模型),通过人机交互&a…...
低代码移动端集成:简化开发、提升用户体验的利器
什么是低代码平台? 低代码平台是一种开发工具,它允许用户通过图形化界面而非传统编程语言来构建应用程序。这种平台通过可视化的拖拽组件和配置,显著简化了应用开发过程。用户可以在这些平台上快速创建功能模块、设计用户界面,并…...
Redis入门1
Redis简介 Redis是一个基于内存的 key-value 结构数据库。 基于内存存储,读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 官网:https://redis.io 中文网:https://www.redis.net.cn/ window版启动命令 redis-server.exe redis.windows.con…...
SHT20温湿度传感器的C语言驱动
SHT20 是一款高精度的温湿度传感器,常用于环境监测和自动化控制系统中。以下是 SHT20 温湿度传感器的 C 语言驱动示例,展示了如何通过 I2C 通信与 SHT20 传感器进行通信以获取温度和湿度数据。 驱动流程 初始化 I2C 通信发送命令读取温度或湿度数据解析…...
系统架构师考试学习笔记第四篇——架构设计实践知识(16)层次式架构设计理论与实践
本章考点: 大纲,本课时知识点会涉及单选为题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。本课时知识架构如图1…...
顶踩Emlog插件源码
源码介绍 顶踩Emlog插件源码 前些天看到小刀娱乐网的文章页面有了一些变化,那就是增加了一个有价值/无价值的顶踩按钮。 样式也是非常的好看 再加上两个表情包是非常的有趣。 写到了Emlog系统,效果如上图。 如何使用: 需要在echo_log.…...
国庆出游季,南卡Runner Pro5骨传导耳机让旅途更完美!
国庆长假将至,无论是计划一场远行还是近郊的户外活动,一款适合的耳机都能让旅途更加愉快。南卡Runner Pro5骨传导耳机以其独特的设计和功能,成为了国庆出行的理想伴侣。 首先,骨传导耳机通过颅骨传递声音,避免了传统耳…...
HarmonyOS NEXT 封装实现好用的网络模块(基于最新5.0的API12)
在 HarmonyOS-NEXT 开发中,网络请求是应用开发中不可或缺的一部分。为了提高开发效率和代码复用性,我们可以封装一个好用的网络模块组件。本文将介绍如何在 HarmonyOS-NEXT 中封装一个功能强大且易于使用的网络模块组件。 封装目的 网络模块使用的频率最…...
Visual Studio提示:无法安装CPpython.Exe.x64
如果你需要在Visual Studio中使用python环境,而且你本身已经有一个python环境,则只需要将你自己的python环境配置到Visual Studio中即可,可以无视如题报错,将不会产生实质性的问题或影响。 解决办法: 工具->获取工…...
计算机网络 ---- 电路交换、报文交换、分组交换
目录 零、前言 一、计算机网络发展初期面临的问题 1.1 电路交换的主要特点【电话网络采用电路交换技术】 1.1.1 电路交换的基本知识介绍 1.1.2 电路交换的优缺点 1.3 报文交换技术的特点【电报网络采用报文交换技术】 1.3.1 报文交换的基本知识介绍 1.3.2 报文交换技术…...
OceanBase 基于企业版本OAT安装与OMS安装与InfluxDB的集成
一、前言与环境准备 说明:OceanBase V3 的OMS手动安装与V4的OMS手动安装是存在区别的,建议V4版本的OMS通过OAT进行安装。 前言: OAT 是 OceanBase V4是企业版本安装Web界面的简易安装工具。 InfluxDB 是OMS 的监控时序数据库。 OMS 是Ocea…...
【油猴脚本】tampermonkey 的使用方法,油猴脚本(tampermonkey )编写方法,油猴脚本(tampermonkey )获取脚本的方法
前言:哈喽,大家好,今天给大家分享【油猴脚本】tampermonkey 的使用方法,油猴脚本(tampermonkey )编写方法,油猴脚本(tampermonkey )获取脚本的方法!并提供具体…...
Keil MDK报错:Browse information of one or more files is not available----解决方法:
Keil MDK报错:Browse information of one or more files is not available----解决方法: 问题描述 最近在项目中遇到这样一个问题:拷贝过来添加到工程的.c文件在编译时报如下错误: 解决方案: 总结以下一些解决办法&…...
C# WPF编程-串口通信
C# WPF编程-串口通信 串口通信1. NuGet安装System.IO.Ports2. 界面布局XAML3. C#代码4. 运行效果源码下载 串口通信 1. NuGet安装System.IO.Ports 2. 界面布局XAML <Window x:Class"BlocksTools.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006…...
MybatisPlus中tableName、tableId 和 tableField
在MyBatis-Plus中,tableName、tableId 和 tableField 等注解主要用于自动映射实体类与数据库表之间的关系,以及指定表的主键、字段名等,以减少手动配置的工作量。这些注解是MyBatis-Plus为了简化开发而提供的强大特性之一。下面分别介绍这些注…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
