ORMLITE를 사용하여 sqlite db에 유지되는 모델 클래스입니다.데이터베이스를 이전 상태로 롤백해야합니다.
public class Site{
...
...
Collection<Visit> visits;
}
public class Visit{
...
...
Collection<Pic> pics;
}
public class Pic{
...
...
}
이제 한 가지보기에서이 세 가지 표를 추가, 수정 또는 삭제합니다. 내보기에는 변경 사항을 취소하는 버튼이 있습니다 (추가, 편집, 삭제). 그래서 전 db의 이전 상태로 롤백해야합니다.
android와 함께 ormlite를 사용하여 세 개의 테이블 중 특정 상태로 롤백 할 수 있습니까?
나는 DAO.SetAutoCommit() 및 startThreadConnection() 방법에 대해 ormlite의 문서를 읽기로했다. 나는이 두 가지를 사용하여 내가 할 수 있다고 생각한다. 그러나 그것을 사용하는 방법을 알아낼 수 없습니다. 나에게 그걸하는 법을 제안 해주세요.
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 애플 리케이션의 복제를하고있어 그래서 디자인 흐름이 나를 위해 옵션이 아닙니다. – rawcoder064
하지만 내가 자동으로 커밋을하고 커밋 (연결을 유지하는 것) 전에 롤백을 수행하는지 궁금합니다. 무엇이 문제 일 수 있습니까? – rawcoder064
아무 것도 아닐 수도 있습니다. 데이터베이스에 대해 단일 연결이 열려 있음을 기억하십시오. 다른 모든 데이터베이스 작업은 @ rawcoder064와 같은 트랜잭션에서 연결을 유지함으로써 영향을받습니다. – Gray