如果把Connection的AutoCommit設為False,兩次executeQuery之間,通過其它途徑(我通過Navicat)修改了status值為1,第二次executeQuery依然把那條數據讀出來了,也就是說,我在Navicat中的操作就像沒有發生一樣,需要重新連接或者con.commit()一下才能讀到。猜測可能是事務的隔離級別造成的。
?con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
不允許臟讀,果然OK了,這種情況平時還是要注意一下的
- Connection?con?=?DriverManager?
- ????????.getConnection(?
- ????????????????"jdbc:mysql://localhost/spider?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true",?
- ????????????????"root",?"111111");?
- ????????????con.setAutoCommit(false);?
- ?????????????
- ?????????
- ????????Statement?stmt?=?null;?
- ????????ResultSet?rs?=?null;?
- ????????try?{?
- ????????????stmt?=?con.createStatement();?
- ?????????????
- ????????????rs?=?stmt.executeQuery("select?*?from?queue?where?status="?
- ????????????????????+?String.valueOf(0));?
- ????????????while?(rs.next())?{?
- ????????????????String?url?=?rs.getString("url");?
- ????????????????System.out.println(url);?
- ????????????}?
- ?
- ?
- ????????}?catch?(SQLException?e)?{?
- ????????????e.printStackTrace();?
- ????????}?finally?{?
- ????????????if?(stmt?!=?null)?{?
- ????????????????try?{?
- ????????????????????stmt.close();?
- ????????????????}?catch?(SQLException?e)?{?
- ????????????????????e.printStackTrace();?
- ????????????????}?
- ????????????}?
- ????????}?
- ?????????
- ????????Thread.sleep(15000);?//等待的時候在navicat中修改數據的status=1
- ?
- ????????System.out.println("next");?
- ?????????
- ????????try?{?
- ????????????stmt?=?con.createStatement();?
- ????????????rs?=?stmt.executeQuery("select?*?from?queue?where?status="?
- ????????????????????+?String.valueOf(0));?
- ????????????while?(rs.next())?{?
- ????????????????String?url?=?rs.getString("url");?
- ????????????????System.out.println(url);?
- ?
- ????????????}?
- ?
- ????????}?catch?(SQLException?e)?{?
- ????????????e.printStackTrace();?
- ????????}?finally?{?
- ????????????if?(stmt?!=?null)?{?
- ????????????????try?{?
- ????????????????????stmt.close();?
- ????????????????}?catch?(SQLException?e)?{?
- ????????????????????e.printStackTrace();?
- ????????????????}?
- ????????????}?
- ????????}?
?
本文轉自 dogegg250 51CTO博客,原文鏈接:http://blog.51cto.com/jianshusoft/765736,如需轉載請自行聯系原作者