当前位置: 首页 > news >正文

使用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()方法来创建自己的对象。第一个方法是最经常使用的,其他的想忽略也行。

PrepareStatement类的常用方法
方法功能描述返回值
setNull(int parameterIndex, int sqlType)将指定的参数设置为SQL NULLvoid
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的过程中进行的&#xff0c;属于Shuffle阶段 但是在Job端不要忘记进行调用&#xff1a;job.setPartitionerClass(xxx.class) 按照年龄分区&#xff1a; class AgePartitioner extends Partitioner<MyComparable, N…...

计算机三级 - 数据库技术 - 第十四章 数据仓库与数据挖掘 笔记

第十四章 数据仓库与数据挖掘 内容提要&#xff1a; 了解数据仓库相关技术了解数据仓库的设计、建造、运行及维护了解OLAP及多维数据模型了解数据挖掘技术 决策支持系统(DSS)&#xff1a;综合利用大量数据有机组合众多模型(数学模型和数据处理模型)&#xff0c;通过人机交互&a…...

低代码移动端集成:简化开发、提升用户体验的利器

什么是低代码平台&#xff1f; 低代码平台是一种开发工具&#xff0c;它允许用户通过图形化界面而非传统编程语言来构建应用程序。这种平台通过可视化的拖拽组件和配置&#xff0c;显著简化了应用开发过程。用户可以在这些平台上快速创建功能模块、设计用户界面&#xff0c;并…...

Redis入门1

Redis简介 Redis是一个基于内存的 key-value 结构数据库。 基于内存存储&#xff0c;读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 官网:https://redis.io 中文网:https://www.redis.net.cn/ window版启动命令 redis-server.exe redis.windows.con…...

SHT20温湿度传感器的C语言驱动

SHT20 是一款高精度的温湿度传感器&#xff0c;常用于环境监测和自动化控制系统中。以下是 SHT20 温湿度传感器的 C 语言驱动示例&#xff0c;展示了如何通过 I2C 通信与 SHT20 传感器进行通信以获取温度和湿度数据。 驱动流程 初始化 I2C 通信发送命令读取温度或湿度数据解析…...

系统架构师考试学习笔记第四篇——架构设计实践知识(16)层次式架构设计理论与实践

本章考点&#xff1a; 大纲,本课时知识点会涉及单选为题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。本课时知识架构如图1…...

顶踩Emlog插件源码

源码介绍 顶踩Emlog插件源码 前些天看到小刀娱乐网的文章页面有了一些变化&#xff0c;那就是增加了一个有价值/无价值的顶踩按钮。 样式也是非常的好看 再加上两个表情包是非常的有趣。 写到了Emlog系统&#xff0c;效果如上图。 如何使用&#xff1a; 需要在echo_log.…...

国庆出游季,南卡Runner Pro5骨传导耳机让旅途更完美!

国庆长假将至&#xff0c;无论是计划一场远行还是近郊的户外活动&#xff0c;一款适合的耳机都能让旅途更加愉快。南卡Runner Pro5骨传导耳机以其独特的设计和功能&#xff0c;成为了国庆出行的理想伴侣。 首先&#xff0c;骨传导耳机通过颅骨传递声音&#xff0c;避免了传统耳…...

HarmonyOS NEXT 封装实现好用的网络模块(基于最新5.0的API12)

在 HarmonyOS-NEXT 开发中&#xff0c;网络请求是应用开发中不可或缺的一部分。为了提高开发效率和代码复用性&#xff0c;我们可以封装一个好用的网络模块组件。本文将介绍如何在 HarmonyOS-NEXT 中封装一个功能强大且易于使用的网络模块组件。 封装目的 网络模块使用的频率最…...

Visual Studio提示:无法安装CPpython.Exe.x64

如果你需要在Visual Studio中使用python环境&#xff0c;而且你本身已经有一个python环境&#xff0c;则只需要将你自己的python环境配置到Visual Studio中即可&#xff0c;可以无视如题报错&#xff0c;将不会产生实质性的问题或影响。 解决办法&#xff1a; 工具->获取工…...

计算机网络 ---- 电路交换、报文交换、分组交换

目录 零、前言 一、计算机网络发展初期面临的问题 1.1 电路交换的主要特点【电话网络采用电路交换技术】 1.1.1 电路交换的基本知识介绍 1.1.2 电路交换的优缺点 1.3 报文交换技术的特点【电报网络采用报文交换技术】 1.3.1 报文交换的基本知识介绍 1.3.2 报文交换技术…...

OceanBase 基于企业版本OAT安装与OMS安装与InfluxDB的集成

一、前言与环境准备 说明&#xff1a;OceanBase V3 的OMS手动安装与V4的OMS手动安装是存在区别的&#xff0c;建议V4版本的OMS通过OAT进行安装。 前言&#xff1a; OAT 是 OceanBase V4是企业版本安装Web界面的简易安装工具。 InfluxDB 是OMS 的监控时序数据库。 OMS 是Ocea…...

【油猴脚本】tampermonkey 的使用方法,油猴脚本(tampermonkey )编写方法,油猴脚本(tampermonkey )获取脚本的方法

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享【油猴脚本】tampermonkey 的使用方法&#xff0c;油猴脚本&#xff08;tampermonkey &#xff09;编写方法&#xff0c;油猴脚本&#xff08;tampermonkey &#xff09;获取脚本的方法&#xff01;并提供具体…...

Keil MDK报错:Browse information of one or more files is not available----解决方法:

Keil MDK报错&#xff1a;Browse information of one or more files is not available----解决方法&#xff1a; 问题描述 最近在项目中遇到这样一个问题&#xff1a;拷贝过来添加到工程的.c文件在编译时报如下错误&#xff1a; 解决方案&#xff1a; 总结以下一些解决办法&…...

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中&#xff0c;tableName、tableId 和 tableField 等注解主要用于自动映射实体类与数据库表之间的关系&#xff0c;以及指定表的主键、字段名等&#xff0c;以减少手动配置的工作量。这些注解是MyBatis-Plus为了简化开发而提供的强大特性之一。下面分别介绍这些注…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...