1、简要说明
在工具包中,数据库的交互处理分为2大部分:SQL 和 ORM。SQL 即通过各个数据库的sql语句,来操作(增、删、改、查)数据库的数据。ORM即通过数据库数据结构与Java 对象的映射,来操作(增、删、改、查)数据库的数据。
在文章的编写顺序上,我们先学习关于SQL部分的处理,然后学习ORM部分的处理。因为,数据库只识别SQL形式的操作指令;即使是ORM方式,也只是通过ORM映射生成SQL语句,发送给数据库执行。大家对此有大概的了解即可。
本章节,我们介绍关于数据的删除处理,即 delete 语句。对于不懂sql语句语法的同学,可以参考以下教程网站: https://www.w3school.com.cn/sql/sql_delete.asp
2、测试库表的设计
为了更好的演示,我以 MySQL 8 数据库为例子。我用的客户端工具是官方客户端:MySQL Workbench 8.0 CE ,有兴趣可以自己去 Oracle 网站上下载。首先创建一个测试表,结构如下:

注意:
表名:test_insert
数据字段:有3个,分别为:id 整型,主键,唯一索引,自增列;strings 字符类型 最大长度 100;ctime 时间类型。
温馨提示,自增列一般不用作主键、唯一索引。唯一索引和主键,必须是有明确意义的字段。这里只是举例,请勿照搬。
2.1、测试数据如下:

3、关于JDBC的预处理
在Java语言中,如果要连接数据库,需要使用JDBC驱动程序。JDBC 作为一个标准只制定了规范,没有做具体的实现,实现交给了各大数据库厂家。而JDBC标准中,提供了一种名为 java.sql.PreparedStatement 的接口。它一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入。
SQL语句会预编译在数据库系统中。执行计划同样会被缓存起来,它允许数据库做参数化处理。使用预处理语句比普通的语句更快,因为它做的工作更少。delete 语句的预处理,语法如下图:

从上图,我们可以看出,delete 语句将要删除的数据条件设置为英文的问号。其实,在具体执行时,一般以列表的方式传入预处理参数。数据库会动态处理英文的问号参数。
注意:另外,本工具包对于 sql 语句有校验要求:语句至少包含一个预处理参数(即至少有一个 '?' )。否则语句校验不通过,无法执行。
4、独立事务处理
在数据库众多数据库产品中,有些数据库比如:Oracle 是需要手动提交事务的;而有些数据库比如:SQL Server 是自动提交事务的。为了统一我们的事务操作,要先保证我们的数据库连接,事务不是自动提交的。参考以下配置:

在工具包中,如果我们对于数据操作(增、删、改、查)不需要同步事务,则使用 DBOperator 对象即可。它里面的操作方法,每一次执行,都是一个单独的事务。语句之间,不作事务同步。下面,我们编写2个不同的代码,验证事务的处理。框架实现代码如图:

4.1、无异常的例子(delete 语句一般处理条件就明确了处理的数据范围,所以工具包实现上,使用单次执行,不是批量方式)



4.2、有异常的例子(delete 语句一般处理条件就明确了处理的数据范围,所以工具包实现上,使用单次执行,不是批量方式)
在 4.1 的基础上,我们修改一下,将第2个 sql 语句添加不存在的条件,这样就会报错。然后观察事务是否同步。如下图:



5、同步事务处理
大致上,我们可以参考第4点中的说明。要注意的是,如果要让多个操作间事务同步。首先,要保证它们使用的是同一个数据库连接(connection)。另外,我们如果要让多个操作事务同步,不能直接用 DBOperator ,而要用 DBTransAction 。框架实现代码如下:

使用举例如下:
5.1、无异常的例子(delete 语句一般处理条件就明确了处理的数据范围,所以工具包实现上,使用单次执行,不是批量方式)



5.2、有异常的例子(delete 语句一般处理条件就明确了处理的数据范围,所以工具包实现上,使用单次执行,不是批量方式)



本章节完结