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

第4讲:Statement接口的使用

何先振 2024-03-12
687

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


访问数据库的方式



获取了数据库连接对象之后,那么我们下一步就需要通过数据库连接对象去给数据库服务器发送SQL指令了。


具体如何发送指令,在java.sql包下给我们提供了三个接口,分别以不同的方式去给数据库发送SQL指令。


Statement:用于执行静态SQL语句并且返回它所生成结果对象。我们查看JDK的工具文档。





PreparedStatement:用于执行预编译的SQL语句。通常我们使用的最多就是这个接口,因为使用Statement会存在一些弊端,后面我们会讲解。






CallableStatement:用于执行存储过程。





总结:通过JDBC访问数据库的三种方式。





Statement访问数据库



通过上一讲,我们知道了如何获取连接对象。我们把他封装成一个方法。





使用时只需要调用方法,即可获取连接对象。





有了连接对象,我们可以通过连接对象创建发送SQL的Statement对象。





查看JDK使用文档,这是连接对象中提供的一个方法。





在第2讲中我们在数据库中创建了一张用户表。





现在就使用Statement对象通过账号、密码查询用户信息。


首先我们准备好要查询的账号和密码。比如:以查询张三为例子。





然后准备SQL语句





我们查看Statement接口给我们提供的发送SQL语句的方法。带有execute的方法都是执行SQL的方法。





但是一般我们重点关注,两个方法,一个是执行查询SQL的方法。另外一个是执行非查询的方法。





我们的SQL可分为:


DDL(表、数据库的创建、删除、修改)


DML(表数据的插入、删除、修改)


DQL(表数据的查询)


DCL(数据库的权限控制)


TPL(事务控制语句)


所有非查询的操作都可以使用这个方法。





所有查询的SQL就可以使用这个方法。





我们现在是要通过账号和密码查询用户,就使用查询的方法。调用方法返回的是一个结果集对象。ResultSet





看JDK的帮助文档,可以看到这个对象保存的就是返回的数据。


本身提供了一个游标,默认是第一行的前面,调用一下next方法就可以定位到一行的数据。如果没有数据就返回false。


还可以通过get方法获取游标定位的值。





调用get方法,获取每一列的数据,可以传索引值,从1开始,也可以传列的名称。如果有别名就传别名。两种方式。








运行程序,我们看到就可以接收到用户信息,打印出来了。





Statement的弊端



虽然通过Statement方式可以发送SQL,但是一般情况下不推荐使用。


因为他只能发送静态的SQL语句,什么是静态的SQL语句就是SQL要全部准备好,参数要一个一个拼接上。





如果是insert语句,参数比较多,拼接起来就比较费劲。


还有就是因为要拼接SQL参数,还会引发SQL注入问题。


下面的代码,在参数中注入sql语句。





打断点,调试拼接成的SQL语句就是这个样子的。





执行后可以把系统所有用户都查出来。








拼接参数如果不嫌麻烦你可以接受,但是SQL注入带来的安全问题,这个就无法接受了。


要想解决这个问题,JDBC中提供了PreparedStatement接口,可以执行预编译好的SQL,防止这种SQL注入引发的安全问题发生。


下讲我们开始讲解PreparedStatement接口的使用,请持续关注。



扫码进微信答疑群



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

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

评论