#java #android #sqlite
#java #Android #sqlite
Вопрос:
В приложении, которое мы собираем, я пытаюсь обновить строки из разных действий, но оно выдает ошибку или ничего не обновляет, потому что, похоже, я не могу получить текущий rowId, как только я перехожу от одного действия к следующему. Любые мысли были бы замечательными.
Это происходит из-за действия:
Cursor value;
db.open();
long rowId = value.getLong(value.getColumnIndex("_id"));
boolean id = db.updateA(rowId, a1, a2, a3, a4);
db.close();
Если я установлю «rowId = 1», эта строка будет обновлена просто отлично, но я хочу получить строку, которая была только что создана в другом действии.
Это находится в файле DBHelper:
public boolean updateA(long rowId, String a1,String a2, String a3, String a4) {
ContentValues args = new ContentValues();
args.put(C_A1, a1);
args.put(KEY_A2, a2);
args.put(KEY_A3, a3);
args.put(KEY_A4, a4);
return db.update(TABLE, args, KEY_ROWID "=" rowId, null) > 0;
}
Ответ №1:
Если вам нужно обновить запись, я бы предложил сохранить запись при создании в объекте данных в памяти и передать ее другому действию, которое должно выполнить обновление. Объект данных должен иметь свойство для своего собственного идентификатора, так что вы можете просто использовать это.
Отсутствие ссылки на запись, которую вам нужно обновить, будет катастрофой. Кроме того, если вы знаете, что вам всегда нужно обновлять запись, почему бы вам просто не сделать это при вставке?
Комментарии:
1. Спасибо вам обоим за ваш вклад.
2. @user712343 — Проблем нет. Если вы нашли ответ, который вам помог, вы должны принять ответ, чтобы другие пользователи, которые ищут тот же вопрос, могли быстро увидеть, что было полезно. Вы также можете повысить рейтинг ответов, нажав стрелку вверх слева от каждого сообщения. Наслаждайтесь Stack Overflow!
3. Что я сделал, так это поместил все в одну таблицу, и это исправило то, что я делал.
4. Я попытался сохранить это в базе данных, и это отлично работает, пока строка, в которой я это сохраняю, не будет удалена. Есть ли у вас пример объекта данных, который может хранить эту информацию?
Ответ №2:
Я этого не понимаю.
У вас есть действие A, которое открывает базу данных, обновляет строку и закрывает базу данных. Это делается с помощью класса SQLiteOpenHelper.
Теперь вы переходите к действию B, и что теперь? Отправьте свой первичный ключ (вы это знаете, вы использовали его в качестве A) с помощью putExtra в B (или просто поместите всю строку в B). Если вы присвоите rowid значение B, вы сможете открыть, перечитать строку, обновить при необходимости и снова закрыть. Если вы просто поместите всю строку в B, что ж, это все, что вам нужно сделать, но мне бы этого не хотелось (например, что произойдет, если B выйдет из строя?).
Если вы обновляете в обоих действиях, не зная, что сделали оба действия (и без повторного чтения строк), это чистая удача, с чем вы заканчиваете.
Ответ №3:
Попробуйте это:
return db.update(TABLE, args, KEY_ROWID "='" rowId "'", null)