使用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为了简化开发而提供的强大特性之一。下面分别介绍这些注…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...