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

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

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

批处理:
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();

你可能感兴趣的:(Statements & PreparedStatement & sql注入 & batch批处理)