示例
這是一個會議管理系統。用來管理各種各樣的會議參與者信息。數據庫里面有個表Participants,里面的每條記錄表示一個參會者。因為經常會發生用戶誤刪掉某個參會者的信息。所以現在,用戶刪除時,并不會真的刪除那參會者的信息,而只是將該記錄的刪除標記設為true。24小時以后,系統會自動將這條記錄刪除。但是在這24小時以內,如果用戶改變主意了,系統還可以將這條記錄還原,將刪除標記設置為false。
請認真的讀下面的代碼:
public class DBTable {protected Connection conn;protected tableName;public DBTable(String tableName) {this.tableName = tableName;this.conn = ...;}public void clear() {PreparedStatement st = conn.prepareStatement("DELETE FROM "+tableName);try {st.executeUpdate();}finally{st.close();}}public int getCount() {PreparedStatement st = conn.prepareStatement("SELECT COUNT(*) FROM"+tableName);try {ResultSet rs = st.executeQuery();rs.next();return rs.getInt(1);}finally{st.close();} |
注意到,countParticipants這個方法只計算那些deleteFlags為false的記錄。也就是,被刪除的那些參會者不被計算在內。
上面的代碼看起來還不錯,但卻有一個很嚴重的問題。什么問題?先看看下面的代碼:
上面的代碼看起來還不錯,但卻有一個很嚴重的問題。什么問題?先看看下面的代碼:
|
最后一行代碼,會打印出"There are 1 participants"這樣信息,對不?錯!它打印的是"There are 2 participants"!因為最后一行調用的是DBTable里面的這個方法getCount,而不是ParticipantsInDB的countParticipants。getCount一點都不知道刪除標記這回事,它只是簡單的計算記錄數量,并不知道要計算那些真正有效的參會者(就是刪除標記為false的)。
共4頁: 1 [2] [3] [4] 下一頁 |
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/