暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第5讲:PreparedStatement接口的使用

何先振 2024-03-13
572

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


接口介绍



上讲我们提到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接口的基本使用。实现了一个通用的增删改的方法和一个简单的查询。


那么我们如何将查询封装成一个通用的查询方法,下一讲我们再来介绍。



扫码进微信答疑群




点击上方"何先振"关注并选择设为星标
各类IT技术文章不会错过!

文章转载自何先振,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论