2013-04-01 2 views
0

обновить строку в базу данных при нажатии на кнопкуполучает исключение в обновлении базы данных SQLite в андроида

public void updateContact(long id, String x, String y,String angle) 
     { 
     ContentValues editCon = new ContentValues(); 
     editCon.put(KEY_X, x); 
     editCon.put(KEY_Y, y); 
     editCon.put(KEY_ANGLE, angle); 

     ourDatabase.update(DATABASE_TABLE, editCon, KEY_ROWID + id, null); 

     } 

и я использую его entry.updateContact(1, Double.toString(db1), Double.toString(db2), Double.toString(db3));

, но я получаю исключение: no such colum: _id1 (code1): , while compiling: UPDATE SavedTable SET position_y=?, position_x=?, position_angle=? WHERE_id1

, хотя у меня есть база данных с одной строкой (я создаю запись в своем методе oncreate основного вида деятельности)

+0

опубликовать полный код, с журналом –

+0

Вы обновили номер версии базы данных с момента изменения любые имена столбцов? – Magicode

ответ

1

KEY_ROWID + id не будет работать, как вы ожидаете! KEY_ROWID - это, вероятно, строка, содержащая _id, и переменная id содержит 1, которая приведет к _id1.

Вам нужно это:

ourDatabase.update(DATABASE_TABLE, editCon, KEY_ROWID + "=" + id, null); 

или лучше:

ourDatabase.update(DATABASE_TABLE, editCon, KEY_ROWID + "=?", new String[]{String.valueOf(id)}); 

EDIT:

// pseudocode 
Cursor c = ourDatabase.query(DATABASE_TABLE, null, null....); 
if (c != null) { 
    if (c.getCount() >= 1) { 
     // there is an entry - just update 
    } else { 
     // no entry - create entry 
    } 
} else { 
    // error? But definitively no entry so create one 
} 
+0

Спасибо за ответ. Дело в том, что я обновляю первую строку все время. и каждый раз, когда запускается мое приложение, я вызываю createEntry (который я вставляю в onCreate of main activity), который добавляет одну строку. Фактически я добавляю, что createEntry с поддельными номерами просто нужно что-то обновить с помощью необходимых данных (когда пользователь нажимает кнопку). Как я могу ограничить все это только одной строкой базы данных? –

+0

Если вы просто хотите иметь одну строку в этой таблице, создайте метод createOrUpdate(). Там вам нужно запросить таблицу, чтобы увидеть, есть ли там запись. В этом случае вы используете обновление в этой строке (в этом случае идентификатор всегда должен быть 1). Если в этой таблице нет строки, вы создаете ее. Простая обработка дела :) – WarrenFaith

+0

«Там вам нужно запросить таблицу, чтобы увидеть, есть ли там запись». Не могли бы вы рассказать, как это сделать? –

1

Вам необходимо исправить свой update() метод:

db.update(DATABASE_TABLE, editCon, KEY_ROWID + " = ?", 
      new String[] {String.valueOf(id)}); 

Проблема в том, что вы указали неправильный WHERE пункт.

KEY_ROWID + id 

это переводится на уровне базы данных, как _id1, где она была интерпретирована как колонки: Вы это написали.

Вам необходимо _id = 1 и это достигается за счет KEY_ROWID + " = ?" где заполнитель будет заменено на значение из строки массива.

Смежные вопросы