- 使用PreStatement对象:
public int execUpdate(String sql, Object[] parms) {
int count = 0;
try {
this.getConn();
ps = conn.prepareStatement(sql);
if (parms != null) {
for (int i = 0; i < parms.length; i++) {
ps.setObject(i + 1, parms[i]);
}
}
count = ps.executeUpdate();
return count;
} catch (SQLException e) {
e.printStackTrace();
} finally {
//关闭数据库连接
this.closeConn(conn, resultSet, ps);
}
return count;
}
注:PreparedStatement 防止 SQL 注入的原理就是把用户非法输入的单引号进行转义,最终传入参数作为一个整体执行,从而防止 SQL 注入,而 Statement 对象不会进行此操作。
* jdbc操作事务: 1、获得connection对象 2、设置conn.setAutoCommit(false); 3、只有执行conn.commit();才会一起提交,否则不会一起提交 conn.rollback(); 回滚方法
public void test(){
try {
this.getConn();
String sql1="update user set money=money-500 where user_name='张三'";
String sql2="update user set money=money+500 where user_name='李四'";
conn.setAutoCommit(false);//关闭自动提交,开启事务
conn.prepareStatement(sql1).executeUpdate();
int x=1/0;//模拟中途出错
conn.prepareStatement(sql2).executeUpdate();
conn.commit();//事务提交
} catch (SQLException e) {
try {
conn.rollback();//执行失败,事务回滚
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
}finally {
closeConn(conn,null,null);
}
}
Original: https://www.cnblogs.com/xiaoye-Blog/p/16502694.html
Author: 小也取不到名字
Title: MySQL知识点大全!!
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505158/
转载文章受原作者版权保护。转载请注明原作者出处!