JavaWeb学习笔记-18 SQL的P处理
Posted Moon&&Dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb学习笔记-18 SQL的P处理相关的知识,希望对你有一定的参考价值。
SQL的P处理
p处理就是一次执行多条sql
p处理可以通过Statement和prepareStatement来处理
-
Statement:执行传入带有参数的sql,如果执行的行数过多,代码会比较臃肿,还会造成sql注入
String s1=delete from t_music where id=1 String s2=delete from t_music where id=2 String s3=delete from t_music where id=3 //将sql添加到批处理 st.addBatch(s1); st.addBatch(s2); st.addBatch(s2); //执行批处理 st.executeBatch();
-
PreparedStatement:固定sql,传入不同的参数 int[] ids
String sql=delete from t_song where id=? PrepareStatement ps = con.prepareStatement(sql); for(int i=0;i<ids.length;i++){ //赋值参数 ps.setInt(1,ids[i]); //添加到批处理对象中 ps.addBatch(); } ps.executeBatch()
一般建议在sql执行p处理的时候,和事务结合使用
public boolean deleteMusicsByIds(Integer[] music_ids) {
con = JdbcConnection.getConnection();
try {
// 开启事物处理
con.setAutoCommit(false);
SQL = "DELETE FROM t_music WHERE id=?";
state = con.prepareStatement(SQL);
// 设置传入的id
for (int i = 0; i < music_ids.length; i++) {
// 设置参数
state.setInt(1, music_ids[i]);
// 添加到批类中
state.addBatch();
}
// 执行p处理,返回每一行数据执行的结果,组成的数组
int[] ints = state.executeBatch();
// 清空
state.clearBatch();
// 遍历结果
for (int i : ints) {
// 如果存在不成功
if (i<1){
// 回滚事务
con.rollback();
return false;
}
}
// 循环结束后全成功,提交事务
con.commit();
return true;
} catch (SQLException throwables) {
throwables.printStackTrace();
try {
// 出现异常,回滚事务
con.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
} finally {
JdbcConnection.close(con, state, res);
// 需要将事务设置为自动提交
try {
con.setAutoCommit(true);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return false;
}
以上是关于JavaWeb学习笔记-18 SQL的P处理的主要内容,如果未能解决你的问题,请参考以下文章