Statement、PreparedStatement与CallableStatement

都是用于执行SQL语句的对象,创建stmt对象后,通过调用stmt.executeQuery()stmt.executeUpdate()来执行sql语句。


三种Statement接口

● Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。

● PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement

● CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。

CallableStatement 继承于 PreparedStatement 继承于 Statement


常用Statement方法:

(1)execute(String sql):运行语句,返回是否有结果集

(2)executeQuery(String sql):运行select语句,返回ResultSet结果集。

(3)executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。

(4)addBatch(String sql) :把多条sql语句放到一个批处理中。

(5)executeBatch():向数据库发送一批sql语句执行。

 

区别:

1、执行sql语句格式不同。

  ①. Statement

String sql = "insert into book (bookid,bookname,bookauthor,booksort,bookprice) 
                        values ('"+var1+"','"+var2+"',"+var3+",'"+var4+","+var5+"')";  

stmt = conn.createStatement();  

rs = stmt.executeUpdate(sql);  

  . PreparedStatement

String sql = "insert into book (bookid,bookname,bookauthor,booksort,bookprice) values (?,?,?,?,?)";  

pstmt = conn.preparedStatement(sql);  

pstmt.setString(1,var1);  

pstmt.setString(2,var2);  

pstmt.setString(3,var3);  

pstmt.setString(4,var4);  

pstmt.setString(5,var5);  

pstmt.executeUpdate();  

  PstmtSQL语句中的变量剥离出来,提高了代码的可读性灵活性

  并且读取SQL语句是在创建语句对象的时候,而stmt是在执行execute方法时读取SQL语句。

 

2、PreparedStatement提高了代码的执行效率,而且更安全

PreparedStatement接口是Statement接口的子接口,因此继承了Statement接口的所有功能。

PreparedStatement接口的机制是在数据库支持预编译的情况下,预先把SQL语句进行编译,当我们需要多次执行这条SQL语句时,可以直接执行已编译好的SQL语句,这样就大大提高了执行效率


而说到安全性,PreparedStatement的预编译机制可以避免sql注入。

类似于'or'1' = '1';  甚至是再加上  Drop table user;这样的sql语句,将不会出现这样的问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值