Room - удаление таблицы и сброс ее первичного ключа - PullRequest
0 голосов
/ 06 октября 2018

Я хочу удалить все записи в таблице перед добавлением новых и сбросить 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, как решить эту проблему, и даже посмотрел на Android-документацию Room, как сбросить первичный ключ, ноничего не нашел.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Вы можете сделать это с двумя запросами:

delete from your_table;    

и

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

Это поможет.n равно 1 в вашем случае.Идентификатор снова начнется с 1.

0 голосов
/ 06 октября 2018

Попробуйте использовать этот запрос:

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

, поскольку таблица будет соответствовать имени вашей таблицы, например:

 @Query("UPDATE SQLITE_SEQUENCE SET seq = 1 WHERE name = 'WHEATHERS'")
void clearPrimaryKey();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...