Это слишком сложно, SQL может справиться с этим в один запрос

//en.wikipedia.org/wiki/Upsert

Вставить обновление хранимой процедуры на SQL Server

Есть ли какой-нибудь умный способ сделать это в SQLite, о котором я не думал?

В основном я хочу обновить три из четырех столбцов, если запись существует, если она не существует, я хочу вставить запись со значением по умолчанию (NUL) для четвертого столбца.

Идентификатор является первичным ключом, поэтому в UPSERT будет только одна запись.

(Я пытаюсь избежать издержек SELECT, чтобы определить, нужно ли мне ОБНОВИТЬ или ВСТАВИТЬ, очевидно)

Предложения?

Я не могу подтвердить, что синтаксис на сайте SQLite для TABLE CREATE. Я не построил демо-версию, чтобы проверить его, но он не поддерживается ...

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

CREATE TABLE table1( 
    id INTEGER PRIMARY KEY ON CONFLICT REPLACE, 
    Blob1 BLOB ON CONFLICT REPLACE, 
    Blob2 BLOB ON CONFLICT REPLACE, 
    Blob3 BLOB 
);

но первые два больших двоичных объекта не вызовут конфликта, только идентификатор будет таким образом. Поэтому я не могу заменить Blob1 и Blob2 (по желанию)

ОБНОВЛЕНИЯ в SQLite, когда привязка данных является полной транзакцией, что означает, что каждая отправляемая строка, подлежащая обновлению, требует: операторов Prepare / Bind / Step / Finalize, в отличие от INSERT, который позволяет использовать функцию сброса

Жизнь объекта оператора выглядит примерно так:

Создайте объект с помощью sqlite3_prepare_v2 ()Привязать значения к параметрам хоста, используя интерфейсы sqlite3_bind_.Запустите SQL, вызвав sqlite3_step ()Сбросьте инструкцию с помощью sqlite3_reset (), затем вернитесь к шагу 2 и повторите.Уничтожьте объект оператора с помощью sqlite3_finalize ().

ОБНОВЛЕНИЕ Я предполагаю, медленный по сравнению с INSERT, но как это сравнить с SELECT с использованием первичного ключа?

Возможно, мне следует использовать select, чтобы прочитать 4-й столбец (Blob3), а затем использовать REPLACE, чтобы написать новую запись, смешивая исходный 4-й столбец с новыми данными для первых 3 столбцов?

Ответы на вопрос(17)

Ваш ответ на вопрос