這裏是我的模型類,它使用ORMLITE在sqlite數據庫中保存。需要將數據庫滾回到以前的狀態
public class Site{
...
...
Collection<Visit> visits;
}
public class Visit{
...
...
Collection<Pic> pics;
}
public class Pic{
...
...
}
現在在一個視圖中我添加,編輯或從這三個表中刪除。我的視圖中有一個按鈕用於取消更改(添加,編輯,刪除)。所以我需要回滾到以前的db狀態。
我怎樣才能實現這回滾到三個表使用ormlite與android的某個狀態?
我在ormlite文檔大約DAO.SetAutoCommit()和startThreadConnection()方法讀取。我想我可以通過使用這兩個來做到這一點。但不知道如何使用它們。請告訴我如何去做。
這裏是我的DBHelper類:
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
// name of the database file
private static final String DATABASE_NAME = "Test.db";
private static final int DATABASE_VERSION = 1;
private Dao<Site, Integer> siteListDao = null;
private Dao<Visit, Integer> visitDao= null;
private Dao<Pic,Integer> picDao=null;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database,ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Site.class);
TableUtils.createTable(connectionSource, Visit.class);
TableUtils.createTable(connectionSource, Pic.class);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(), "Can't create database", e);
throw new RuntimeException(e);
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
public Dao<Visit, Integer> getVisitDao() {
if (null == visitDao) {
try {
visitDao = getDao(Visit.class);
}catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
return visitDao;
}
.....
.....
感謝您的快速建議。我會考慮你的兩個選擇。我正在做一個iOS應用程序到Android的克隆,所以設計流程的改變對我來說不是一種選擇。 – rawcoder064 2013-03-26 15:40:22
但是,我很好奇,想知道如果我使用auto commit關閉並在提交之前進行回滾(保持連接打開),可能是什麼問題? – rawcoder064 2013-03-26 15:46:45
什麼也沒有。只要記住有一個連接打開到數據庫。任何其他數據庫操作都將受到像@ rawcoder064這樣的事務中的連接的影響。 – Gray 2013-03-26 15:49:08