相关疑难解决方法(0)

如何在Android Room中完全重新创建数据库?

我有一种情况,我希望能够使用Android Room硬重置我的数据库.使用SQLiteOpenHelper,我可以通过编写一个方法来删除所有表和索引,然后手动调用SQLiteOpenHelper.onCreate().

我知道我可以访问一个SupportSQLiteOpenHelper通风室并自己丢弃所有表格,但似乎没有一个好方法来启动娱乐过程.

另外,我知道我可以删除每个表中的每个项目而不删除它,但这不是我想要的.这不会重置自动递增主键,因此新项目的"id"字段不会重置为1.

谢谢!

编辑:
这是我希望能够在运行时任意做的事情.

编辑2:
该方法应该是可维护的,即不涉及手写符合Room行为的SQL.理想情况下,可以通过某种方式检索 Room生成的SQL或SQLiteOpenHelper.onCreate()等效方法.或其他任何解决这个问题的方法!:)

android-room

15
推荐指数
2
解决办法
8626
查看次数

如何在sqlite中重置自动增量序列号

如何在Ormlite中更新表sqlite_sequence?我只需要更新seq.如何通过ORMLite获取该表?

编辑

我找不到ORLite工具来做这个,所以我使用简单的sqlite查询.在我的类扩展OrmLiteSqliteOpenHelper我使用SQLiteDatabase进行更新.

EDIT2;)

在我的项目中,我坚持课课和课堂定义.

class Lesson{
    @DatabaseField(generatedId=true)
    private int id;
    ...
}

class WeekDefinitions{
    @DatabaseField(generatedId=true)
    private int id;
    @DatabaseField(foreign=true, columnName="lesson_id")
    private Lesson lesson;
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,当我添加新课程时,id是递增的.例如

id = 1 Math
id = 2 English
id = 3 Medicine
Run Code Online (Sandbox Code Playgroud)

并在weekDefinition中:

id = 1 lesson_id = 1  nr = 20
id = 2 lesson_id = 1  nr = 22
id = 3 lesson_id = 2  nr = 32
...
id = 12 lesson_id = 3  nr = 3
Run Code Online (Sandbox Code Playgroud)

SQLite将此行添加到sqlite_sequence中(使用autoincrement时)

rowId = …
Run Code Online (Sandbox Code Playgroud)

sqlite android ormlite

8
推荐指数
4
解决办法
2万
查看次数

如何截断表?

我需要截断房间数据库中的一个表。或者我需要将自动增量键重置为 0。有什么办法可以做到这一点。

database android android-room

6
推荐指数
1
解决办法
5005
查看次数

Android 房间 - 清除 sqlite_sequence 不起作用

以下代码不会将自动增量 ID 重置/清除为 0

database = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, DatabaseMeta.DB_NAME)
            .build();
database.query("DELETE FROM sqlite_sequence WHERE name = ?", new Object[]{"tableName"});
Run Code Online (Sandbox Code Playgroud)

或者

database.query("REPLACE INTO sqlite_sequence (name, seq) VALUES ('mission', -1)", null);
Run Code Online (Sandbox Code Playgroud)

无论如何要清除sqlite_sequenceAndroid房间吗?

我认为,Android 房间没有使用“sqlite_sequence”进行自动递增逻辑,我不确定。尝试打印sqlite_sequence条目,找不到我使用的表名(具有自动递增主键)。

android android-sqlite android-room

5
推荐指数
1
解决办法
791
查看次数

Android room - 如何清除所有表的sqlite_sequence

如果用户从应用程序注销,我将使用以下命令一一清除表中的数据

@Query("DELETE FROM tableName")
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用下面的代码一一清除所有表的 sqlite_sequence 。

database = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, DatabaseMeta.DB_NAME)
        .build(); 
database.query("DELETE FROM sqlite_sequence WHERE name = ?", new Object[]{"tableName"})
Run Code Online (Sandbox Code Playgroud)

不幸的是,清算sqlite_sequence不起作用。所以如果用户再次登录,那么起始rowId不会从1开始创建。

还有其他方法可以做到这一点吗?我尝试清除整个数据库,并在用户再次登录后添加新条目。

android android-sqlite android-room

5
推荐指数
1
解决办法
2681
查看次数