Java中为了控制事务的一致性,会使用插入回滚点、callback方法,保证数据不被篡改,示例如下:
public String delete(String id) {
String ID = id;
db = new getConnection();
Connection con = db.getConnection();
try {
con.setAutoCommit(false);
db.executeUpdate("delete from helloworld where ID=" + ID); //更新操作1
db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2
db.executeUpdate("delete from helloworld_user where ID=" + ID); //更新操作3
con.commit();//提交JDBC事务
con.setAutoCommit(true);
db.close();
return “success”;
}
catch (Exception e) {
con.rollBack();//回滚JDBC事务
e.printStackTrace();
db.close();
return “fail”;
}
}
简单的~在连接了数据库之后,将自动commit的参数改为false,conn.setAutoCommit( false );
并在执行了sql语句之后调用conn.commit();
就可以了
lz可能想在上传,修改,删除文件时,同时操作数据库记录吧?
更正一下,只有对数据库的一组操作才叫事物,操作文件是业务逻辑,不能写在一起。你可以先完成对文件的操作,再根据文件的操作情况(操作成功与否)操作数据库,一个在业务层,一个在持久层。
对文件操作的事物控制?
那就得从新写了~
其实就是写个指令的缓冲
比如Hibernate的Session,就是把SQL语句(或者HQL)先存起来,然后commit的时候再一次执行(当然其中没那么简单,也使用了cglib来同步实体对象)
你写的话,其实也是写个缓冲而且,调用的方法表面是
delete()(这个方法需要你自己实现的,而不是File类的delete())
其实内部只是记下个指令而已
这仅仅是思路,具体还要看你的