Android 需要将数据库回滚到以前的状态
下面是我的模型类,它们使用ORMLITE持久化在sqlite db中Android 需要将数据库回滚到以前的状态,android,rollback,ormlite,autocommit,Android,Rollback,Ormlite,Autocommit,下面是我的模型类,它们使用ORMLITE持久化在sqlite db中 public class Site{ ... ... Collection<Visit> visits; } public class Visit{ ... ... Collec
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;
}
.....
.....
公共类DatabaseHelper扩展了OrmLiteSqliteOpenHelper{
//数据库文件的名称
私有静态最终字符串数据库\u NAME=“Test.db”;
私有静态最终int数据库_VERSION=1;
私有Dao siteListDao=null;
私有Dao visitDao=null;
私有Dao picDao=null;
公共数据库助手(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase数据库,ConnectionSource ConnectionSource){
试一试{
TableUtils.createTable(connectionSource,Site.class);
createTable(connectionSource,Visit.class);
createTable(connectionSource,Pic.class);
}捕获(SQLE异常){
Log.e(DatabaseHelper.class.getName(),“无法创建数据库”,e);
抛出新的运行时异常(e);
}catch(java.sql.sqle){
e、 printStackTrace();
}
}
公共Dao getVisitDao(){
if(null==visitDao){
试一试{
visitDao=getDao(Visit.class);
}catch(java.sql.sqle){
e、 printStackTrace();
}
}
回访道;
}
.....
.....
嗯,我不知道有什么方法可以自动为您执行此操作。如果您真的想自动执行此操作,您也可以签出事务。它们具有内置控件,可以在失败时回滚。这不完全是您想要的,但可能是可调整的
您也可以更手动地执行此操作并保存1(最后一个)内存中的对象,即您要删除的对象。如果某人想要“撤消”更改,您可以使用ORMLite重新添加该对象。可能比其他选项容易得多。是的,我基本上同意@Stefan。我认为您需要在应用程序内部执行此操作,而不是依赖数据库构造来返回到上一个版本美国的国家 关闭自动提交(使用Sqlite下的事务)或直接使用事务不是实现这一点的方法。事务旨在允许您对数据库进行多次更改,然后在一次数据库更改失败时将其全部回滚。它们不打算在等待用户输入的几秒钟内保持打开状态
- 您可以在数据中有一个提交的布尔字段或类似字段,以便通过删除
或类似字段中的所有对象来更轻松地“还原”数据库committed=false
- 您可以有单独的表,以便将对象存储到会话表中,然后在用户提交其工作时复制到主表中