姬長信(Redy)

Android Room – 在每次应用运行时重置自动生…


我正在使用Room来保存数据.
我有一个实体,它有一个自动生成的主键,模仿票证系统.

实体:

@Entity
public class SequenceAction {

    @PrimaryKey(autoGenerate = true)
    private Integer sequenceId;
    private String actionType;
    private String extraInfo;
    //getters&setters
}

初始化:

sequenceAction = new SequenceAction();
sequenceAction.setActionType(COLLECT_ALL);
sequenceAction.setExtraInfo("id = " + ids.get(i));
//run this line with executer(sequenceId is automatically set on insert to table):
AppDatabase.getInstance(getContext()).sequenceActionDao().save(sequenceAction);

在每个应用程序运行时,我需要此键从0开始.

我使用AppDatabase.getInstance(getApplicationContext()).clearAllTables();为了在退出时清除表,但是,这不会重置密钥起始索引,而是从最后一次运行时停止的位置开始.

我还没有找到使用Room这样做的方法所以我试图使用SimpleSQLiteQuery来做到这一点:

新的SimpleSQLiteQuery(“…查询…”);

在我的Dao中传递给RawQuery方法:

@RawQuery()
?整数init(SimpleSQLiteQuery查询);

我已经尝试了下一个查询:

>“ALTER TABLE SequenceAction AUTO_INCREMENT = 0”

我收到一个错误(我尝试使用’AUTOINCREMENT’,同样的错误):

android.database.sqlite.SQLiteException: near “AUTO_INCREMENT”: syntax error (code 1): , while compiling: ALTER TABLE SequenceAction AUTO_INCREMENT = 0

可能是因为,正如this question/answer所述,SQLite中没有自动增量关键字,而是一个声明为INTEGER PRIMARY KEY的列将自动自动增量.

>“从sqlite_sequence中删除name =’SequenceAction’”

没有错误,但索引也没有重置.

>按照建议here

“UPDATE SQLITE_SEQUENCE SET seq = -1 WHERE name =’SequenceAction’”

没有错误但没有效果.

>“TRUNCATE TABLE’SequenceAction’;”

错误(可能是因为SQLite doesn’t support the TRUNCATE command):

android.database.sqlite.SQLiteException: near “TRUNCATE”: syntax error (code 1): , while compiling: TRUNCATE TABLE ‘SequenceAction’;

>所以……最后一次尝试:DELETE FROM SequenceAction

没有错误,没有效果.