以下是使用ORMLITE在sqlite数据库中保留的模型类。
public class Site{
...
...
Collection<Visit> visits;
}
public class Visit{
...
...
Collection<Pic> pics;
}
public class Pic{
...
...
}
现在在一个视图中我添加,编辑或删除这三个表。我的视图中有一个按钮可以取消更改(添加,编辑,删除)。所以我需要回滚到db的先前状态。
如何使用ormlite与android实现此回滚到三个表的某个状态?
我已阅读有关 DAO.SetAutoCommit()和 startThreadConnection()方法的ormlite文档。我想我可以用这两个来做到这一点。但是无法弄清楚如何使用它们。请建议我怎么做。
这是我的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;
}
.....
.....
答案 0 :(得分:2)
嗯,不知道任何会自动为你做这个的方法。如果您真的想自动执行此操作,您还可以查看交易。它们具有内置控件以在失败时回滚。不完全是你想要的,但可能是可调节的。
您也可以手动执行此操作并将1(最后)对象保存在内存中,即要删除的对象。如果某人想要“撤消”更改,您只需使用ORMLite重新添加该对象即可。可能比其他选项容易得多。
答案 1 :(得分:1)
是的,我大多同意@Stefan。我认为您需要在应用程序内部执行此操作,而不是依赖数据库构造来让所有人返回到先前的状态。
关闭自动提交(ORMLite使用Sqlite下的事务)或直接使用事务是不如何执行此操作。事务旨在允许您对数据库进行多项更改,然后在一次数据库更改失败时将它们全部回滚。它们无意在等待用户输入的情况下保持打开状态。
committed = false
或其他类似内容的所有对象来“还原”数据库。