Посмотрите на http://sqlite.org/lang_conflict.html.
Вы хотите что-то вроде:
insert or replace into Book (ID, Name, TypeID, Level, Seen) values
((select ID from Book where Name = "SearchName"), "SearchName", ...);
Обратите внимание, что любое поле, отсутствующее в списке вставок, будет иметь значение NULL, если строка уже существует в таблице. Вот почему есть выборка для столбца ID
: в случае замены оператор установит для него значение NULL, а затем будет выделен новый идентификатор.
Этот подход также может быть использован, если вы хотите оставить отдельные значения полей в одиночку, если строка в случае замены, но в поле вставки установить значение NULL.
Например, если вы хотите оставить Seen
в покое:
insert or replace into Book (ID, Name, TypeID, Level, Seen) values (
(select ID from Book where Name = "SearchName"),
"SearchName",
5,
6,
(select Seen from Book where Name = "SearchName"));