事务的特点
示例
上面直接调用将删除shangsan而lisi的却没有删除(如果想实现两个要么user要么都删除,要么都不删除可以通过事务来控制,若方法出错,如上,则事务rollback回滚都不删除,若方法执行无异常则删除两个user)
一,原子性
事务是一个完整的操作。
二,一致性
当事务完成是,数据必须处于一致状态
三,隔离性
对数据进行修改的所有并发事务是彼此隔离的
四、永久性
事务完成后,它对数据库的修改时永久保持
JDBC对事务管理的支持
一、commit()提交 rollback()回退
二、事务是自动提交的
调用setAutoCommit(false)禁止自动提交
示例
有一个表user
字段①name②age
通过一个delete方法(该方法通过姓名删除)
/**
* 根据姓名删除学生信息
* @param name
*/
public void delect(String name){//jdbc
Connection conn = null;
try {
conn = JDBC.getConnection();
String sql = "delete from user where name = ?";
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1,name);
ptmt.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
//执行该方法会删除第一个name1对应user
public void delete(String name1,String name2 ){//Model
User user = new User();
user.delect(name1);
String ob = null;
ob.substring(1);
user.delect(name2);
}
public static void main(String[] args) throws SQLException {/Test
UserAction ua = new UserAction();
ua.delete("zhangsan","lisi");
}
上面直接调用将删除shangsan而lisi的却没有删除(如果想实现两个要么user要么都删除,要么都不删除可以通过事务来控制,若方法出错,如上,则事务rollback回滚都不删除,若方法执行无异常则删除两个user)
/**
* 根据姓名删除学生信息
* @param name
*/
public void delect(String name){//jdbc
Connection conn = null;
try {
conn = JDBC.getConnection();
String sql = "delete from user where name = ?";
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1,name);
ptmt.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void delete(String name1,String name2 ) throws SQLException{//Model
Connection conn = JDBC.getConnection();
try {
conn.setAutoCommit(false);
User user = new User();
user.delect(name1);
String ob = null;
ob.substring(1);
user.delect(name2);
conn.commit();
} catch (SQLException e) {
conn.rollback();
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException {Test
UserAction ua = new UserAction();
ua.delete("zhangsan","lisi");
}