public void insertLyxx(List list,Connection con){
try {
String insertBdyyfxxSQL = "insert into qqdd_lyxx values(?,?,?,?)";
con = DBUtil.getConnection(dbInfo);
con.setAutoCommit(false);
ps = con.prepareStatement(insertBdyyfxxSQL);
if(!list.isEmpty()){
for(int i=0;i<list.size();i++){
Lyxx lyxx = (Lyxx) list.get(i);
System.out.println("lyxxDao="+lyxx.getLyxx_bh()+":"+lyxx.getFwfid()+":"+lyxx.getDdzxid()+":"+lyxx.getBz());
ps.setString(1, lyxx.getLyxx_bh());
ps.setString(2, lyxx.getFwfid());
ps.setString(3, lyxx.getDdzxid());
ps.setString(4, lyxx.getBz());
ps.executeUpdate();
}
}
con.commit();
} catch (SQLException e) {
try {
con.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}代码如此,我试了,抛异常后没有回滚,怎么回事啊?请求指点!
System.out.println("开始回滚");
con.rollback();
}
这样试试
最常使用的2种存储引擎:
1.Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD(MYData,存储数据)、.MYI(MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。
2.InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
我看了,我的MySQL是MyISAM的,这是不是不支持事务啊??如何改成InnoDB啊??
create table mytbl(
id int primary key,
name varchar(50)
)type=MyISAM;
--建完表后修改
alter table mytbl2 type = InnoDB;
--查看修改结果(mytest为表所在的database名字)
show table status from mytest;
Query OK, 0 rows affected (0.00 sec) mysql> insert into article values(1,'z');
Query OK, 1 row affected (0.00 sec) mysql> select * from article;
+------+-------+
| id | title |
+------+-------+
| 1 | z |
+------+-------+
1 row in set (0.00 sec) mysql> rollback;
Query OK, 0 rows affected (0.05 sec) mysql> select * from article;
Empty set (0.00 sec)
这个是mysql测试事务的例子 改好了 你可以试一下