Сброс автоинкремента в Android SQLite - PullRequest
11 голосов
/ 18 марта 2012

У меня есть этот метод, который удаляет все строки из таблицы, но я также хочу, чтобы он сбрасывал автоинкремент, чтобы при добавлении новой строки он снова начинался. Оператор SQL, который я использую, не работает из-за того, что некоторые столбцы не существуют. Я правильно делаю?

private void rmvAll() {

    SQLiteDatabase db = appts.getWritableDatabase();
    db.delete(TABLE_NAME, null, null);
    db.execSQL("DELETE FROM SQLITE_SEQUENCE WHERE NAME = " + TABLE_NAME);

}

Ответы [ 4 ]

23 голосов
/ 18 марта 2012

вам понадобятся одинарные кавычки вокруг имени таблицы, т.е.

db.execSQL("DELETE FROM SQLITE_SEQUENCE WHERE NAME = '" + TABLE_NAME + "'");
3 голосов
/ 13 января 2013

Опираясь на ответ dldnh:

Следующий запрос установит для seq наибольшее значение в столбце идентификаторов col в таблице Tbl, поэтому риск нарушения ограничений отсутствует.

UPDATE sqlite_sequence SET seq = (SELECT MAX(col) FROM Tbl) WHERE name="Tbl"
1 голос
/ 01 июня 2017

Я слишком старался.

Наконец-то я получил этот код ответа ...

Book.deleteAll(Book.class);
book=new Book(user, pass);
book.setId(Long.valueOf(book.listAll(Book.class).size()));
book.save();

этот код работает как удаление и повторное создание таблицы. И сброс идентификатора.

удачи

0 голосов
/ 08 июля 2014

вы также можете использовать метод delete () SQLiteDatabase, например:

db.delete("SQLITE_SEQUENCE","NAME = ?",new String[]{TABLE_NAME});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...