SQLite на Android: insertWithOnConflict () возвращает постоянно растущие результаты для тех же наборов данных - PullRequest
5 голосов
/ 14 июня 2011

УРОВЕНЬ ПРОБЛЕМЫ: У меня есть две таблицы, в которых первичные ключи являются текстовыми полями.

Когда я неоднократно использую SQLiteDatabase.insertWithOnConflict(myTable, null, myValues, SQLiteDatabase.CONFLICT_REPLACE) с одними и теми же данными, я вижу, что возвращаются все увеличивающиеся значения.

Похоже, что INSERT выполняется (вместо REPLACE) для тех же наборов данных.

ПРОБЛЕМА: Однако, глядя на эти таблицы с помощью "Обозревателя баз данных SQLite"«Я вижу правильное количество записей, которое я ожидаю при выполнении REPLACE.

Корень моей путаницы - это описание документации Android, в которой говорится: * Возвращает идентификатор новой вставленной строки ИЛИ основнойключ существующей строки, если входной параметр 'contactAlgorithm' = CONFLICT_IGNORE ИЛИ -1, если возникнет какая-либо ошибка *

ВОПРОС: Почему выполняется ЗАМЕНА, но идентификатор строкисуществующие данные не возвращаются?

Ответы [ 2 ]

6 голосов
/ 14 июня 2011

Мне кажется, что он делает именно то, что вы просите? Вы просите это заменить , и он делает именно это. Это удалит старый ряд и вставит новый.

Было бы покинуть старую строку и вернуть этот идентификатор, если вы вместо этого передали CONFLICT_IGNORE.

0 голосов
/ 16 марта 2016
try{
insertWithOnConflict(openHelper_ob.TABLE_NAME,null,contentValues,
SQLiteDatabase.CONFLICT_ABORT);
}
catch(SQLException ex)
{
Toast.makeText(getApplicationContext(),"name found before plz, change it", Toast.LENGTH_SHORT).show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...