Statement与PreparedStatement的使用

1、Statement的使用


(1)Statement:执行静态SQL语句
(2)PreparedStatement:执行动态SQL语句
(3)CallableStatement:执行数据库存储过程

PreparedStatement的好处
     ①可维护性:虽然用PreparedStatement来代替Statement会使代码多出几行,
     但这样的代码无论从可读性还是可维护性上来说都比直接用Statement的代码高很多档次
     ②执行效率:每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.
     因为预编译语句有可能被重复调用,所以在任何时候就可以不需要再次编译而可以直接执行,
     效率会提高很多
     ③安全性:这也是最重要的一点, PreparedStatement可以有效的防止“注入式攻击”,
     极大地提高了执行SQL语句的安全性
预编译:
——当客户发送一条SQL语句给服务器后,服务器总是需要校验SQL语句的语法格式是否正确,
    然后把SQL语句编译成可执行的函数,最后才是执行SQL语句。
    其中校验语法,和编译所花的时间可能比执行SQL语句花的时间还要多。
——注意:可执行函数存储在MySQL服务器中,并且当前连接断开后,MySQL服务器会清除已经存储的可执行函数。
——如果我们需要执行多次insert语句,但只是每次插入的值不同,MySQL服务器也是需要每次都去校验SQL语句的
    语法格式,以及编译,这就浪费了太多的时间。
——如果使用预编译功能,那么只对SQL语句进行一次语法校验和编译,所以效率要高。

预编译SQL语句分为两个过程:
——准备语句过程:将预编译语句编译成执行计划,SQL语句只需编译一次,供后续多次调用,编写效率高
——执行语句过程:对于要多次执行的SQL语句,直接调用编译得到的机器代码段,执行效率高

示例
Insert语句
    String sql ="insert into stu(id,name) values(?,?)";
    PreparedStatement pst=connection.preparedStatement(sql);
    pst.setInt(1,3);
    pst.setString(2,"张三");
    int rs=pst.executeUpdate();
Update语句
    String sql ="update stu set name=? where id=?";
    PreparedStatement pst=connection.preparedStatement(sql);
    pst.setString(1,"李四");
    pst.setInt(2,3);
    int rs=pst.executeUpdate();
Delete语句
    String sql ="delete from stu where id=?";
    PreparedStatement pst=connection.preparedStatement(sql);
    pst.setInt(1,3);
    int rs=pst.executeUpdate();
Select语句
    String sql ="select * from stu where id=?";
    PreparedStatement ps=connection.preparedStatement(sql);
    ps.setInt(1,3);
    ResultSet rs=ps.executeQuery();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值