JDBC之Statement,PreparedStatement,CallableStatement的区别

Statement、 PreparedStatement 、CallableStatement 区别和联系

1. Statement、PreparedStatement和CallableStatement都是接口(interface)。

2. Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。

3. Statement接口提供了执行语句和获取结果的基本方法; 
    PreparedStatement接口添加了处理 IN 参数的方法; 
    CallableStatement接口添加了处理 OUT 参数的方法。

4. a. Statement: 
    普通的不带参的查询SQL;支持批量更新,批量删除;

b. PreparedStatement: 
     可变参数的SQL,编译一次,执行多次,效率高; 
     安全性好,有效防止Sql注入等问题; 
     支持批量更新,批量删除; 
     c. CallableStatement: 
  继承自PreparedStatement,支持带参数的SQL操作; 
  支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持;

Statement每次执行sql语句,数据库都要执行sql语句的编译 ,最好用于仅执行一次查询并返回结果的情形时,效率高于PreparedStatement。

PreparedStatement是预编译的,使用PreparedStatement有几个好处 
1. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。 
2. 安全性好,有效防止Sql注入等问题。 
3.  对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch; 
4.  代码的可读性和可维护性。

注: 
executeQuery:返回结果集(ResultSet)。 
executeUpdate: 执行给定SQL语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句, 
或者不返回任何内容的SQL语句(如 SQL DDL 语句)。 
execute: 可用于执行任何SQL语句,返回一个boolean值, 
表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet,则返回true,否则返回false。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Statement用法:  

String sql = "select seq_orderdetailid.nextval as test dual";  

Statement stat1=conn.createStatement();  

ResultSet rs1 = stat1.executeQuery(sql);  

if ( rs1.next() ) {  

    id = rs1.getLong(1);  

}  

  

INOUT参数使用:  

CallableStatement cstmt = conn.prepareCall("{call revise_total(?)}");  

cstmt.setByte(1, 25);  

cstmt.registerOutParameter(1, java.sql.Types.TINYINT);  

cstmt.executeUpdate();  

byte x = cstmt.getByte(1);  

  

Statement的Batch使用:  

Statement stmt  = conn.createStatement();  

String sql = null;  

for(int i =0;i<20;i++){  

    sql = "insert into test(id,name)values("+i+","+i+"_name)";  

    stmt.addBatch(sql);  

}  

stmt.executeBatch();  

  

PreparedStatement的Batch使用:  

PreparedStatement pstmt  = con.prepareStatement("UPDATE EMPLOYEES  SET SALARY = ? WHERE ID =?");  

for(int i =0;i<length;i++){  

    pstmt.setBigDecimal(1, param1[i]);  

    pstmt.setInt(2, param2[i]);  

    pstmt.addBatch();  

}  

pstmt.executeBatch();  

  

PreparedStatement用法:  

PreparedStatement pstmt  = con.prepareStatement("UPDATE EMPLOYEES  SET SALARY = ? WHERE ID =?");  

pstmt.setBigDecimal(1, 153.00);  

pstmt.setInt(2, 1102);  

pstmt. executeUpdate()

时间: 2024-10-12 14:27:59

JDBC之Statement,PreparedStatement,CallableStatement的区别的相关文章

JDBC Statement PreparedStatement CallableStatement

在 JDBC 应用程序中,JDBC 语句对象用于将 SQL 语句发送到数据库服务器.一个语句对象与一个连接相关联,应用程序与数据库服务器之间的通信由语句对象来处理. JDBC 中有三种类型的语句对象: 1. 常规语句(General statement) 2. 预置语句(Prepared statement) 3. 可调用语句(Callable statement) 语句对象与一个连接相关联,所以要创建一个语句对象,首先应该建立一个数据库连接.连接的获取见上一篇博客. 关于这三种语句,个人觉得最

老调重弹:JDBC系列 之 存储过程 CallableStatement(创建和使用)

前言 最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,老调重弹,好好总结一番,作为自己的笔记,也是给读者一个参考--- 本文主要通过 使用JDBC创建存储过程 和使用JDBC调用存储过程两部分 阐述JDBC 对存储过程的支持.本文将在Oracle数据库下创建一个可以表示岗位信息的基本表Jobs为例, 然后通过存储过程对这个Jobs表进行各种操作.表JOBS的建表语句如下: -- Creat

jdbc执行Statement接口的步骤

jdbc执行Statement接口的步骤如下: 1)驱动注册程序: Class.forName(com.mysql.jdbc.Driver); 2)获取连接对象: Connection conn = DriverManager.getConnection(url,user,password); 3)创建Statement对象: Statement stsm = conn.createStatement(); 4)准备sql语句:(静态的sql语句) 5)执行sql语句: stsm.execute

JDBC的statement对象(实现增删改查)

JDBC的statement对象 上图中,很多对象都是固定写死的,唯一要变的是statement对象.JDBC的核心是用statement对象执行增删改查. JDBC中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过statement对象向数据库发送增删改查语句即可. statement对象主要有两个方法:1.executeUpdate方法 2.executeQuery方法 1.executeUpdate方法用于向数据库发送增.删.改的sql语句.exec

jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程

一. java.sql.*   和  javax.sql.*的包的类结构 |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, properties):  连接数据库的方法. url: 连接数据库的URL URL语法: jdbc协议:数据库子协议://主机:端口/数据库 user: 数据库的用户名 password: 数据库用户密码 |- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序 |-regis

JDBC中Statement与PreparedStatement的区别

1. statement每次执行sql语句,相关数据库都要执行sql语句的编译:preparedstatement是预编译的, 采用Cache机制(预编译语句,放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来,有利于sql生成查询计划.),对于批量处理可以大大提高效率. 也叫JDBC存储过程. 例如,如果要执行两条sql语句 SELECT colume FROM TABLE WHERE colume=1;SELECT colume FROM TABLE WHERE co

Statement, PreparedStatement和CallableStatement的区别

Statement用于执行不带参数的简单SQL语句,并返回它所生成的结果,每次执行SQL豫剧时,数据库都要编译该SQL语句. Satatement stmt = conn.getStatement(); stmt.executeUpdate("insert into client values("aa","aaa")"); PreparedStatement表示预编译的SQL语句的对象,用于执行带参数的预编译的SQL语句. CallableSta

JDBC PreparedStatement ,CallableStatement,以及事务,回滚举例

程序中用到的类,文件,jar 代码: 1,文件:db.properties文件内容 user=rootpassword=123url=jdbc:mysql:///student_dbdriver=com.mysql.jdbc.Driveraaa 2,类Utils.class import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException

Java的Statement、PreparedStatement、PreparedStatement + 批处理 的区别

首先来说一下连接了数据库之后执行的sql语句:通常连接了数据库之后,我们就会获得statement 类的对象或者是他的子类的对象(PreparedStatement类),通过这个对象我们就可以利用它提供的方法来操纵数据库了. Statement提供了三种方法来执行sql语句: 1,execute:可以执行在任何的sql语句,但是比较麻烦,通常我们不会选择这一种的但是如果在不清楚SQL语句的类型时,那只能使用execute来执行sql语句了. 2,executeUpdata:主要用于执行DML与D