以下文章来源于何先振,责编小何

上讲我们提到Statement接口,会出现SQL注入的安全问题。为了防止SQL注入的安全问题,一般推荐使用PreparedStatement接口。
PreparedStatement是Statement的子接口。

我们可以通过连接对象提供的方法,创建一个PreparedStatement的对象。红框中就是连接对象提供的方法,我们使用最基础的第一个。

下面我们就来通过PreparedStatement实现一个新增操作。
第一步获取连接对象,前面章节已经讲过,就复用之前的代码。

第二步,需要准备SQL语句,这个SQL语句只写SQL的结构,参数可以通过占位符?表示。

第三步,通过连接对象,创建PreparedStatement对象。这个时候就需要把SQL结构传进去。

这也就是为啥叫预编译的SQL了,就是提前把SQL结构定义好,交给它。

第四步,设置占位符的参数值。可通过setObject方法设置,第一个参数填索引值1代表第一个占位符的参数,依次类推。后面是具体的参数值。

第五步,就可以调用执行方法了。返回插入的行数,大于0表示添加成功。

第六步,关闭资源,不需要的连接资源需要释放掉。可以调用close方法关闭。

竟然涉及资源的关闭操作,最好使用异常处理结构,避免出现异常不能关闭资源。

运行程序,添加成功。


接下来我们使用PreparedStatement实现修改。
通过上面的新增发现,获取连接,关闭资源都是通用的,可以封装一个工具类方便调用。
创建一个JDBCUtils工具类,封装获取连接方法。需要修改一下获取类加载器的方式,避免每次都使用不同的类名。

封装关闭资源代码

调用工具类方法获取连接对象,编写修改方法。

运行程序修改成功


修改写完,使用PreparedStatement实现删除操作。
通过观察我们可以看到其实还可以进一步封装,方法中只是SQL不同,还有设置参数不同,其他都一样。
我们可以在工具类中,封装一个通用的增删改方法。只需要传不同的SQL语句和参数进去就行了。因为不同SQL语句的参数不同,需要用可变形参接收。

调用通用增删改方法,删除王五这条数据


执行程序,查看已经删除。


增删改演示完之后,我们接下来讲解下如何查询。
首先还是按照步骤来,获取连接对象,准备好SQL,获取到PreparedStatement对象。

然后设置查询的参数,这次根据id进行查询,我们可以查id为1的用户。
设置完参数,跟Statement对象一样,调用查询的方法,返回ResultSet结果集。

结果集封装了数据,通过游标定位到每行的数据进行获取。

关闭资源

运行程序,编号为1的用户信息就被查出来了。

这里注意,获取一行中每列的数据,通get对应类型的方法获取。不同的数据库类型对应着Java的不同类型。

我创建的用户表中id为int,其他为varchar。

所以获取编号通过getId,获取其他通过getString获取。

在Java中万物都是对象,一个数据库表对应一个Java类。
表中的一条记录对应着Java类的一个对象。
表中的一个字段对应Java类的一个属性。
我们可以创建一个类封装结果集中的数据。

将每一行记录封装成一个用户对象。


这一讲我们主要讲解了PreparedStatement接口的基本使用。实现了一个通用的增删改的方法和一个简单的查询。
那么我们如何将查询封装成一个通用的查询方法,下一讲我们再来介绍。

扫码进微信答疑群





