Можете ли вы установить столбец, равный другому столбцу таблицы, с помощью SQLiteDatabse update ()? - PullRequest
0 голосов
/ 26 апреля 2018

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

Я знаю, что SQL-оператор:

UPDATE coolTable SET columnA = columnB;

Должен ли я поместить его в ContentValues, я передаю функцию? или строка выбора?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вы можете использовать update() только для установки литеральных значений (в качестве параметров связывания), но не для любого другого вида выражений, поддерживаемых sqlite SQL-синтаксисом .

Используйте execSQL() для выполнения необработанного запроса UPDATE с выражением имени столбца.

0 голосов
/ 26 апреля 2018

execSQL() с проверкой ошибок:

SQLiteDatabase db = getReadableDatabase();

try {
    long count = DatabaseUtils.queryNumEntries(db, "pweb");
    db.execSQL("update pweb set h_id = _id;");
    long rows = DatabaseUtils.longForQuery(db, "SELECT changes()", null);
    if(count != rows ) Log.e("wrong count","update failed");
 }
catch(SQLException e){
  Log.e("SQLException","update failed");            
}  

db.close();

но мне было интересно, возможно ли использовать функцию update () базы данных вместо execSQL ()

Вы можете использовать sqlite3 для просмотра и управления вашими данными, а также для проверки sql команд.

Создать таблицу:

CREATE TABLE pweb (_id INTEGER PRIMARY KEY,h_id  INTEGER ,sent  INTEGER);

См.исходные строки:

sqlite> select * from pweb;
1|10|1
2|20|1
3|30|0
4|40|0

выполнить обновление столбца:

sqlite> update pweb set h_id = _id;

Просмотреть изменения во всех строках:

sqlite> select * from pweb;
1|1|1
2|2|1
3|3|0
4|4|0

Что-то более сложное?

sqlite>  update pweb set h_id = _id + 1;

результат:

sqlite> select * from pweb;
1|2|1
2|3|1
3|4|0
4|5|0

См. Также Общие сведения о базе данных SQLITE в Android :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...