室-删除表并重置其主键

时间:2018-10-06 13:53:05

标签: android sqlite android-room

我想在添加新的表之前删除表中的所有表,并将PrimaryKey重置为1。

这是我的实体

@PrimaryKey(autoGenerate = true)
private int id;
private int weatherId;
private String highTemp;
private String lowTemp;

所以我用

if(weatherEntries != null && weatherEntries.size() != 0){
        Log.d(TAG, "WeatherEntry List is not empty");
            mDb.clearAllTables();


            for(int i = 0; i < weatherEntries.size(); i++) {
                mDb.weatherDao().insertWeather(weatherEntries.get(i));
                Log.d(TAG, "Inserting Weather Data into the Database");
            }
        }

添加新条目时,其主键不是从1开始。 所以,我累了要查询

@Query("ALTER TABLE SequenceAction AUTO_INCREMENT = 0")
void clearPrimaryKey();

我得到了错误

  

“错误:输入'SequenceAction AUTO_INCREMENT'处没有其他变量”

我试图通过Google搜索如何解决此问题,甚至还查看了Room的Android文档,了解如何重置主键,但未找到任何内容。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试使用此查询:

 @Query("UPDATE SQLITE_SEQUENCE SET seq = 1 WHERE name = <table>")
void clearPrimaryKey();

因为表将用作您的表名,例如:

 @Query("UPDATE SQLITE_SEQUENCE SET seq = 1 WHERE name = 'WHEATHERS'")
void clearPrimaryKey();

答案 1 :(得分:0)

您可以通过两个查询来做到这一点:

delete from your_table;    

UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = 'your_table'

这可以解决问题。 n在您的情况下为1。 ID将再次从1开始。