2012-05-03 5 views
2

Привет всем Я хочу обновить строку при нажатии кнопки обновления, но ее не работает. Я использовал следующий код.Как обновить строку в базе данных Android

public void btnUpdate(View v) { 
handeler.updateData(updateName.getText().toString(), updatePhone .getText().toString(), updateEmail.getText().toString(),id); 
} 

public void updateData(String name, String phone, String email, String id) { 
ContentValues values = new ContentValues(); 
values.put(COLUMN_FIRST, name); 
values.put(COLUMN_SECOND, phone); values.put(COLUMN_THIRD, email); database.update(TABLE_NAME, values, id, null); 
} 
public void search() { 
     Cursor cursor = handeler.getData(); 
     if (cursor.moveToFirst()) { 
      String phoneNo; 
      phoneNo = updateByPhone.getText().toString(); 
      do { 
       String s1 = cursor.getString(2); 
       if (phoneNo.compareTo(s1) == 0) { 
        id = cursor.getString(0); 
        updateName.setText(cursor.getString(1)); 
        updateEmail.setText(cursor.getString(3)); 
        updatePhone.setText(cursor.getString(2)); 

       } 
      } while (cursor.moveToNext()); 

     } 

    } 

Так что если кто-нибудь знает, предложите мне, как его решить. Благодаря

+0

разместить свой код, пожалуйста. –

+0

как отправить код, пожалуйста, помогите мне. Я новичок в stackoverflow – Sajan

+0

, если вы не можете этого сделать.просто вставьте его в поле редактирования. –

ответ

2

Я вижу пару возможных проблем:

1) У вас есть дополнительное пространство updatePhone .getText().toString() должно быть updatePhone.getText().toString()

2) вы передаете переменную id из btnUpdate в updateData, но не ясно, где он исходит из (или даже если он на самом деле существует)

Моя ставка является то, что # 2 Ваш вопрос. Вы, вероятно, нужно передать идентификатор (я предполагаю, что это предназначается, чтобы быть RowId вы хотите изменить в БД) в к btnUpdate методе:

public void btnUpdate(View v, long id)  

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

EDIT

В update method документы показать это:

public int update (String table, ContentValues values, String whereClause, String[] whereArgs) 

Примечание часть String whereClause. Это должно быть оператором SQL WHERE (без WHERE). Вы передаете только id, а не предложение WHERE. Измените свой запрос на обновление, чтобы сделать предложение WHERE, и оно должно работать. Несколько примеров:

database.update(TABLE_NAME, values, "_id = " + id, null); 

database.update(TABLE_NAME, values, "_id = '" + id + "'", null); 

В обоих примерах предполагается, что столбец столбцов строк обозначен как _id.

Первый пример: id - целочисленное значение. Проблема в том, что вы устанавливаете id как строку, поэтому я не уверен, что это так или нет. Если предполагается, что это int, вы должны получить его, используя id = cursor.getInt(0); вместо id = cursor.getString(0);.

Если это действительно строка, а не int, используйте вторую версию, которая включает id в одинарных кавычках, чтобы указать, что это строка.

Надеюсь, это поможет!

+0

См. Барак, в моей БД есть четыре столбца. Поиск осуществляется с помощью PhoneNo, и если пользователь понимает, любая модификация должна быть выполнена, просто измените это и нажмите кнопку обновления. Обновленная строка должна быть сохранена. Это все мое требование. – Sajan

+0

Я понимаю, что .. вам нужно передать идентификатор строки методу обновления, иначе он не знает, что обновить. – Barak

+0

Так что, может, дайте мне пример в соответствии с моим кодом ..... – Sajan

0

изменить код

database.update(TABLE_NAME, values, "_id='?'", new String[]{id}); 

Редактировать

database.update(TABLE_NAME, values, "_id=?", new String[]{id}); 
+0

Его не работает .... Changwei Yao То же самое ошибка – Sajan

+0

Обертывание '?' В кавычках '' _id = '?' "', Вы ищете знак вопроса _actual_. Если вы хотите, чтобы флаг вставки просто использовал '' _id =? "'. – Sam

0

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

database.update(TABLE_NAME, values, BaseColumns._ID + "=" + id, null); 
Смежные вопросы