Нельзя использовать метод SQLiteDatabase update , если вы сначала не извлекли данные и не сцепили их (из-за того, как метод защищает от внедрения SQL (заключает значение в одинарные кавычки)). Тем не менее, вы можете сделать это исключительно через SQL, используя что-то вроде следующего: -
String updtsql = "UPDATE " + TABLE_NAME + " SET " + COLUMN_NAME_LOCATION + " = " + COLUMN_NAME + "||" + COLUMN_LOCATION + ";";
database.execSQL(updtsql);
- Примечание , здесь нет предложения WHERE, поэтому он будет обновлять каждую строку (согласно вашему коду).
||
- оператор конкатенации SQL.
Однако, почему? (риторический) Вы вводите дублирование данных, поскольку в этом нет необходимости, поскольку вы можете легко извлечь объединенные данные.
, например
Вы можете извлечь ArrayList из всех столбцов COLUMN_NAME_LOCATION (т.е. со столбцом, содержащим объединенные данные), используя: -
public ArrayList<String> getNameLocationV1() {
ArrayList<String> rv = new ArrayList<>();
String[] columns = new String[]{COLUMN_NAME_LOCATION};
Cursor csr = database.query(TABLE_NAME,columns,null,null,null,null,null);
while (csr.moveToNext()) {
rv.add(csr.getString(csr.getColumnIndex(COLUMN_NAME_LOCATION)));
}
csr.close();
return rv;
}
Однако, немного отличаясь, извлекает точно такие же данные, но без затрат на дополнительный столбец (т. Е. Для таблицы нужны только COLUMN_NAME и COLUMN_LOCATION): -
public ArrayList<String> getNameLocationV2() {
ArrayList<String> rv = new ArrayList<>();
String concatColumnName = COLUMN_NAME + COLUMN_LOCATION;
String[] columns = new String[]{COLUMN_NAME + "||"+COLUMN_LOCATION+" AS " + concatColumnName};
Cursor csr = database.query(TABLE_NAME,columns,null,null,null,null,null);
while (csr.moveToNext()) {
rv.add(csr.getString(csr.getColumnIndex(concatColumnName)));
}
csr.close();
return rv;
}
- Единственное отличие - имя для производного столбца, т. Е.
String concatColumnName = COLUMN_NAME + COLUMN_LOCATION;
(для этого можно использовать COLUMN_NAME_LOCATION)
- Другое отличие состоит в том, что вместо предоставления имени столбца используется выражение, объединяющее два столбца (COLUMN_NAME и COLUMN_LOCATION).
- Эта методология более эффективна, так как снижает накладные расходы;
- дополнительное дисковое пространство, необходимое для дублирования данных, и
- наличие дополнительного (ненужного) процесса обновления данных