jdbc三种statement对象(简述JDBC中三种Statement对象的作用)

本文目录
- 简述JDBC中三种Statement对象的作用
- myabtis源码解析四(mybatis中statement对象的创建)
- JDBC使用步骤过程
- java jdbc 里connection可以创建哪几种Statement
- jdbc的五大核心
- 27. JDBC 提供了三种接口来实现SQL语句的发送执行,( )接口的对象用于执行简单的不带参数的SQL语句
- jdbc编程中主要有哪几种语句对象有什么区别
- 在JDBC里面,statement只是一个接口并没有实现那为什么能够创建statement对象
- jdbc connection是不是可以创建多个statement
简述JDBC中三种Statement对象的作用
1、Statement对象用于执行不带参数的简单SQL语句。2、Prepared Statement 对象用于执行预编译SQL语句。3、Callable Statement对象用于执行对存储过程的调用。
myabtis源码解析四(mybatis中statement对象的创建)
上一期,我们分析了sql语句的创建过程,接下来,咱们进入到下一个特别重要的对象创建,statement对象的创建
StatementHandler 是一个非常核心接口,不仅要创建合适statement对象,再将参数放到statement对象中,执行sql,处理结果集.可以说这些步骤都是在statementHandle中
实现的,接下来咱们跟着源码一起来分析,还是以查询为例,接着上期的selectOne分析
再来看一下statement的uml图
接下来,我们需要设置参数到sql中了,JDBC 提供了三种 Statement 接口,分别是 Statement、PreparedStatement 和 CallableStatement。他们的uml图为:
statement:提供执行的sql语句
PreparedStatement:对输入参数执行动态替换,也就是将之前的?替换为具体的参数
CallableStatement:用于保存存储过程输出的结果
我们来来分析PreparedStatement
statement创建就是这样,重点看下参数是怎样设置进去的
我们来执行一条根据主键查询的sql语句,然后debug运行,看看参数如何设置进去的
每一个?都会在parameterMappings集合中生成一个对象属性,执行完之后,一条正正的sql就形成了
当我们执行完sql后就要开始处理查询结果了结果集的处理工作由结果集处理器 ResultSetHandler 执行。ResultSetHandler 是一个接口,它只有一个实现类 DefaultResultSetHandler。结果集的处理入口方法是 handleResultSets,下面来看一下该方法的实现。
这里注意啊一下,resultHandle是一个接口,我们可以实现自己的类,用来自定义结果集,map,list等等
JDBC使用步骤过程
JDBC操作数据库的基本步骤:
1、加载JDBC驱动程序。
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String className)实现。成功加载后,会将Driver类的实例注册到DriverManager类中。
2、提供JDBC连接的URL。
连接URL定义了连接数据库时的协议、子协议、数据源标识。
书写形式:协议:子协议:数据源标识。
3、创建数据库的连接。
要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象, 该对象就代表一个数据库的连接。
使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和 密码来获得。
4、创建一个Statement,要执行SQL语句,必须获得java.sql.Statement实例。
Statement实例分为以下3 种类型:
(1)执行静态SQL语句。通常通过Statement实例实现。
(2)执行动态SQL语句。通常通过PreparedStatement实例实现。
(3)执行数据库存储过程。通常通过CallableStatement实例实现。
5、执行SQL语句。
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 和execute
6、处理两种情况的结果。
(1)执行更新返回的是本次操作影响到的记录数。
(2)执行查询返回的结果是一个ResultSet对象。
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些 行中数据的访问。
使用结果集(ResultSet)对象的访问方法获取数据。
7、关闭JDBC对象(关闭结果集--》关闭数据库操作对象--》关闭连接)。
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声 明顺序相反:
(1)关闭记录集。
(2)关闭声明。
(3)关闭连接对象。
扩展资料:
一、JDBC(Java DataBase Connectivity,java数据库连接)
是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
二、特性
Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法。而 JDBC 正是作为此种用途的机制。
三、用途
简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。
java jdbc 里connection可以创建哪几种Statement
createStatement方法创建的是Statement,prepareStatement方法创建的是PrepareStatement,两个都是接口,PrepareStatement是Statement的子接口。
区别:
Statement每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement,但存在sql注入风险。
PreparedStatement是预编译执行的。在执行可变参数的一条SQL时,PreparedStatement要比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率高。安全性更好,有效防止SQL注入的问题。对于多次重复执行的语句,使用PreparedStatement效率会更高一点。执行SQL语句是可以带参数的,并支持批量执行SQL。由于采用了Cache机制,则预编译的语句,就会放在Cache中,下次执行相同的SQL语句时,则可以直接从Cache中取出来。
jdbc的五大核心
DriverManager、Connection、Statement、ResultSet、PreparedStatement。JDBC的五大核心:
1、DriverManager:负责管理数据库连接的管理层,允许开发者通过DriverManager获取数据库连接。
2、Connection:负责表示与数据库的连接。开发者可以通过Connection对象来执行SQL语句并处理事务,还可以通过Connection对象来设置事务和自动提交。
3、Statement:负责将SQL语句发送给数据库执行。Statement对象提供了一个基本的操作,即发送SQL语句给数据库执行,并返回执行结果。
4、ResultSet:负责保存从数据库检索到的结果集。ResultSet对象可以遍历数据库中的所有行和列,并可以用于查询和更新数据库信息。
5、PreparedStatement:预处理语句,是一种特殊类型的Statement对象,能够优化SQL语句的执行速度,避免SQL注入攻击,并提供更好的可读性。
27. JDBC 提供了三种接口来实现SQL语句的发送执行,( )接口的对象用于执行简单的不带参数的SQL语句
Statement接口的对象用于执行简单的不带参数的SQL语句。
PrepareStatement接口的对象用于执行带有IN类型参数的预编译过的SQL语句。
CallbleStatement接口的对象用于执行一个数据库的存储过程。
jdbc编程中主要有哪几种语句对象有什么区别
Statement
对象用来运行简单类型的
SQL
语句,语句中无需指定参数。
PreparedStatement
对象用来运行包含(或不包含)
IN
类型参数的预编译
SQL
语句。
CallableStatement
对象用来调用数据库存储过程。
在JDBC里面,statement只是一个接口并没有实现那为什么能够创建statement对象
先回答你的问题:
因为创建的statement对象是实现Statement接口的对象。
这是面向接口编程,是实现多态的一种方式。
为什么JDBC里面要定义一个Statement接口,而不是Statement的具体类。是因为数据库不同而造成的。Sun公司给各个数据库提供商提供一个统一的接口,就是规定好一些约束,让大家来做具体的实现。
比如MySQL和Oracle的驱动不同的,如果Sun公司不用接口用类把它实现了,那就麻烦大了,接口只是定出了一个协议,规定你必须实现什么,怎么实现的就不关心。
jdbc connection是不是可以创建多个statement
�0�2 前面说过,Statement对象是用来绑定要执行的操作的,在它上面有三种执行方法:即用来执行查询操作的executeQuery(),用来执行更新操作的executeUpdate()和用来执行动态的未知的操作的execute().�0�2JDBC在编译时并不对要执行的SQL语句检测,只是把它看着一个String,只有在驱动程序执行SQL语句时才知道正确与否.�0�2 一个Statement对象同时只能有一个结果集在活动.这是宽容性的,就是说即使没有调用ResultSet的close()方法,只要打开第二个结果集就隐含着对上一个结果集的关闭.所以如果你想同时对多个结果集操作,就要创建多个Statement对象,如果不需要同时操作,那么可以在一个Statement对象上须序操作多个结果集.�0�2�0�2 这里我不得不特别说明一下,很多人会用一个Statement进行嵌套查询,然后就来问�0�2Connection conn = null;�0�2Statement stmt = null;�0�2conn = .......;�0�2stmt = conm.createStatement(xxxxxx);�0�2ResultSet rs = stmt.executeQuery(sql1);�0�2while(rs.next()){�0�2�0�2str = rs.getString(xxxxx);�0�2�0�2ResultSet rs1 = stmt.executeQuery(\"select * from 表 where 字段=str\");�0�2}当stmt.executeQuery(\"select * from 表 where 字段=str\");赋给rs1时,这时隐含的操作所以如果要同时操作多个结果集一定要让它他绑定到不同的Statement对象上.好在一个connection对象可以创建任意多个Statement对象,而不需要你重新获取连结.另外PreparedStatement还支持接收参数.在预编译后只要传输不同的参数就可以执行,大大提高了性能.�0�2�0�2�0�2PreparedStatement ps = conn.prepareStatement(\"select * from 表 where 字段=?\");

更多文章:
form表单制作(为什么制作的form表单会在网页显示中多出一行)
2026年10月11日 09:10
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50





