2017-01-17 7 views
0

Допустим, у меня есть подготовленное заявление следующим образом:Sqlite Подготовлено заявление, не изменяйте значение/сохраняйте то же, что и существующее? (Android)

"UPDATE table1 SET column1 = ?, column2 = ? WHERE column3 = ?" 

Можно ли использовать этот оператор только для изменения значения столбца1 или столбца2? Как вы можете себе представить, моя проблема немного сложнее, чем в примере, но в основном у меня будет только некоторые значения столбцов, доступные для обновления, и существует множество разных переменных, и это будет довольно грязно, создавая подготовленные операторы для каждого случая ,

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

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

Итак, какие у меня варианты? Благодаря!

+0

Чего вы хотите достичь? Если он обновляет некоторые столбцы таблицы, то приведенный выше пример будет работать. – Dibzmania

+0

Я знаю, как обновлять столбцы в таблице, и я знаю, что это уже работает, но в частности мне интересно, можно ли оставить один (или более) столбцов, указанных в подготовленном заявлении, неизмененным, поэтому он сохраняет свое первоначальное значение в DB. – hamham

ответ

1

Когда вы используете параметры, значения параметров являются буквальными значениями, то есть они не выполняются или не интерпретируются каким-либо образом.

Единственный способ получить старое значение в этом утверждении - прочитать его с помощью отдельного запроса и использовать результат этого запроса в качестве значения параметра.

SQLite не является базой данных клиент/сервер, поэтому для подготовки оператора нет больших накладных расходов. Просто используйте несколько подготовленных операторов или просто создавайте их на ходу все время.

+0

Спасибо, да, я думал, что это будет так, я выбрал много подготовленных утверждений. Мне действительно нужно сделать это из-за каких-либо несоответствий в работе сервера api, поэтому, как только мы их угадаем, я должен уметь его очищать больше. Спасибо за ваш ответ. – hamham