当前位置:网站首页 > 技术博客 > 正文

java学会增删改查达到什么水平



前一天给大家分享了一些基本的JDBC知识,今天给大家做了一分最详尽的增删改查总结。Let’s go!

作用 关键字 举例 是否需要返回数据 添加(增) INSERT INSERT INTO customers(id)VALUES(9) 显示受到影响,不返回值 删除(删) DELETE DELETE FROM customers WHERE id=9 同上 修改(改) UPDATE update customers set name = ‘周星驰’ where id = 9 同上 查询(查) SELECT SELECT * FROM customers 有结果返回

对上述表进行分析,发现对表的添加、删除以及修改都是不需要返回值的,按照长期对于Java代码的理解,那么,我们就像代码中不需要返回值的一律为void方法,我们可以试着把它归为一类,而查询是需要由返回值的,我们就只能将其单独划分一类。

一、我们先来分析一下我们如果需要对一个数据库的表进行操作,需要那几步叭

  • ①对数据库进行连接(昨天讲过了)
  • ②写sql语句(因为这个肯定也是需要自己编写sql语句进行操作的)
  • ③执行sql语句
  • ④关闭资源

二、以添加为例子先看看

 
  

结果展示

  • 添加前的数据

  • 添加后的数据

在这里插入图片描述

分析一下,上面的的代码,我们不管做哪一个操作,我们都需要的是连接,执行还有释放资源,仅仅只是语句和占位符不一样,这里我们完全可以把她的 代码单独用一个方法包装起来。下面我们试着取写一个通用的方法。

将代码升级到通用的情况

jdbc.properties文件

user=你的用户名

password=用户名对应的密码

url=连接数据库的地址image-20211104153830841

driverClass=com.mysql.jdbc.Driver

注:文件里面的配置文件尽量不要使用空格,否则会出现报错嫌疑!!!

 
  

通用的工具类

看下面的代码想一想为什么本人会在设置连接时选择的是用throws关键字抛出异常,而在关闭资源时选择用try……catch来处理异常呢?

 
  

原因:在连接时也可以使用try……catch抛出,但是为了便捷不使用,而在关闭资源时,是因为使用try-with-resource时,如果对外部资源的处理和对外部资源的关闭均遭遇了异常,“关闭异常”将被抑制,“处理异常”将被抛出,但“关闭异常”并没有丢失,而是存放在“处理异常”的被抑制的异常列表中。所以采用try……catch可以将关闭异常也抛出。

通用的增删改

因为通用,所以对应的SQL语句也会不同,所以我们需要传入不同的数据参数,所以需要利用一个字符串,将我们的SQL语句传入,因为我们采用的是PreparedStatement或者Statement来进行语句的编译,所以还需要填充占位符来进行传入。

 
  

测试一下

有人会发现我这串代码其实是有一点小瑕疵的吗?要是你发现了,请偷偷自己改正,不用说出来,留给大家自己想想瑕疵在何处哟。

 
  

这里就写修改了,因为修改执行忘记截图了,反正大家的数据库又不一样,需要使用的自行修改一下jdbc.properties文件路径,还有sql语句哟。

一、同上我们一起来分析一下 查询操作又可以分为几步呢?

  • ①对数据库进行连接(昨天讲过了)
  • ②写sql语句(因为这个肯定也是需要自己编写sql语句进行操作的)
  • ③执行sql语句并得到返回值这里需要使用这个executeQuery()方法,因为它具有返回结果集的作用
  • ④对得到的结果集进行遍历输出处理
  • ⑤关闭资源

二、这里就直接先上分析

因为我们返回的结果肯定是对 某一个表中的元素值进行返回,所以我们定义一个对象来进行保存我们结果值,顺便可以直接重写tostring方法来进行遍历打印!nice!干!

普通版查询

 
  

分析,因为这样子我们的结果只能一条语句一样的输出,于是想到了使用集合来保存每一条数据,但是集合类型不一致,所以得使用泛型定义。

升级改进版

 
  

测试一下升级版查询

 
  

System.out::println是我偶然发现的,我的猜测来源如下:

 
  

你以为结束了吗?不?难道你的数据库就保存一些简单得东西吗?就存储一些类似于记事本的东西吗?你乐意,我不行,毕竟我还得给自己的数据保存下来,云端太贵,自己加密,手机坏了咋办,上传数据库,嗯需要直接拷走!nice!

Blob类型

  • MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。
  • 插入BLOB类型的数据必须使用PreparedStatement,因为BLOB类型的数据无法使用字符串拼接写的。
  • MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的)
类型 大小(单元:字节) TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G
  • 实际使用中根据需要存入的数据大小定义不同的BLOB类型。
  • 需要注意的是:如果存储的文件过大,数据库的性能会下降。
  • 如果在指定了相关的Blob类型以后,还报错:xxx too large,那么在mysql的安装目录下,找my.ini文件加上如下的配置参数: max_allowed_packet=16M。同时注意:修改了my.ini文件之后,需要重新启动mysql服务。

Blob操作

因为删除数据我们基本上就可以直接用正常的数据删除就可以了,因为删除时肯定一整条数据就没了呀,所以我们主要是涉及到数据的上传、修改和删除操作。下面的代码没有去写通用的操作,如果有需要的可以自行去理解,可以验证你上面的代码是否🆗了。没有结果展示,不是没结果,而是博主觉得没有必要放这样子没有意义的结果。因为看结果反正也是在数据库里面去查看的。下面对于数据流有不懂的小伙伴可以看我io流的博客,有详解。

  • 添加
 
   
  • 修改
 
   
  • 查看
 
   

有人说,博主!博主!我学会了基本的增删改了,可以下课了嘛?

我问一个问题,假如说我要是一下子需要插入两万条数据怎么办呢?

啊!这。

是不是懵圈了,继续叭!接下来我们一起看看批量插入。

博主博主,那待会是不是还有批量删除批量修改呀?

你!嗯!真是个大聪明。 批量操作Update、delete本身就具有批量操作的效果insert此时批量操作就主要指的是批量插入。

嗯,那我们应该有两种思路叭,Statement和PrepareStatement,但是你之前提过PrepareStatement效率更高,应该是采用它来写叭。

既然你都提了,我们就先来看看Statement的代码,看看为什么叭?

  • 批量执行SQL语句

当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率

JDBC的批量处理语句包括下面三个方法:

  • addBatch(String):添加需要批量处理的SQL语句或是参数;
  • executeBatch():执行批量处理语句;
  • clearBatch():清空缓存的数据

通常我们会遇到两种批量执行SQL语句的情况:

  • 多条SQL语句的批量处理;
  • 一个SQL语句的批量传参;
  • Statement
 
   
  • PrepareStatement
 
   

这个代码的比较可能看不出来差距,但是这里面的差距,还算是有的

PreparedStatement 能最大可能提高性能:

  • DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。
  • 在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存。这样每执行一次都要对传入的语句编译一次。
  • (语法检查,语义检查,翻译成二进制命令,缓存)

将其升级

 
   

最终理解版

 
   

终于搞定利用Java对数据进行完整的增删改查了,接下来,开始干它!毕竟我们还知道数据库可不仅仅是增删改查,但是基本的数据我们不会有问题了叭!

下课
在这里插入图片描述

版权声明


相关文章:

  • html表单属性有哪些2025-08-05 16:01:07
  • c语言pthread线程池2025-08-05 16:01:07
  • python程序设计课设2025-08-05 16:01:07
  • 图形验证码实现原理2025-08-05 16:01:07
  • maven本地仓库配置文件2025-08-05 16:01:07
  • linux arm交叉编译程序步骤2025-08-05 16:01:07
  • 马达控制驱动ic2025-08-05 16:01:07
  • ddim是什么2025-08-05 16:01:07
  • mipi接口长什么样2025-08-05 16:01:07
  • scrt怎么安装2025-08-05 16:01:07