Statements & PreparedStatement & sql注入 & batch批处理

Statement是PreparedStatement的父接口,不进行预编译操作。
[color=red]PreparedStatement可以实现Statement的所有功能[/color],但是之所以叫它预编译指令,是因为在[color=red]创建它的一个对象时可以给定具有一定格式的SQL字符串[/color],然后用它的setXXX方法给指定的SQL语句以填空的方式赋值,具有这样的特性后,它[color=red]在多次执行一条固定格式的字符串时就很方便,也更效率[/color].不像Statement那样每次执行都要先编译字符串在执行SQL了.

[b]PreparedStatement能防止sql注入、Statements不能的原因:它们实现机制不同[/b]
Statement是程序中的sql和外部传入的数据拼接成一个完整的sql语句,然后发给数据库执行
PreparedStatement是把程序中的sql语句进行预编译,然后在执行过程中,外部传入的值只是作为数据进行处理,不会再对sql语句进行解析,因此避免了sql注入问题.

[b]批处理:[/b]
1,多个sql语句一起执行

String delSql = "Begin DELETE tbl1 WHERE id=?;DELETE tbl2 WHERE id=?;End;"
pstmt = connection.prepareStatement(sql);
param = 1;
pstmt.setLong(param++, id);
pstmt.setLong(param++, id);

2,同一sql,多条数据同时插入

String insertSql = "insert into tbl1 (id, name) values (?, ?)";
pstmt = connection.prepareStatement(insertSql );
pstmt.setLong(1, id);
pstmt.setLong(2, name);
pstmt.addBatch();

pstmt.setLong(1, id1);
pstmt.setLong(2, name1);
pstmt.addBatch();

pstmt.setLong(1, id2);
pstmt.setLong(2, name2);
pstmt.addBatch();

// 最后使用executeBatch一把提交id,name ; id1,name1; id2,name2的数据
pstmt.executeBatch();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值