2015-10-12 3 views
0

EDIT: [решено]SQLite - Ошибка в методе обновления базы данных

Метод обновления получал неправильный аргумент от своего метода вызова. Следовательно, выход был не таким ожидаемым. Спасибо, что указали, что не может быть никаких совпадений для оператора обновления.


У меня есть различные методы обновления базы данных, написанные, и все они работают нормально, кроме одного. Я не могу понять, что там происходит.

Вот мой код:

BaseDbAdapter:

protected int updateRow(String table, ContentValues initialValues, 
         String whereClause) { 
    if (Const.DEBUGGING_DB) 
     Log.d(Const.DEBUG, "Row in table " + table + " updated " 
       + whereClause); 
    return mDb.update(table, initialValues, whereClause, null); 
} 

PetitionsTableDbAdapter:

public void updateStatus(String member_id, String e_pno, String pno, String status) { 

    ContentValues values = new ContentValues(); 
    values.put(DatabaseHelper.SENT_SUPPORT, status); 

    String whereClause = DatabaseHelper.MEMBER_ID_KEY + " = " + member_id + " AND " + "" 
      + DatabaseHelper.E_PETITION_NUMBER_KEY + " = " + e_pno + " AND " + "" 
      + DatabaseHelper.PETITION_NUMBER_KEY + " = '" + pno + "'"; 

    super.updateRow(DatabaseHelper.PETITIONS_TABLE, values, whereClause); 
} 

public String getStatus(String petition_number) { 

    String status = ""; 

    String query = "SELECT " + DatabaseHelper.SENT_SUPPORT + " FROM " + DatabaseHelper.PETITIONS_TABLE 
      + " WHERE " + DatabaseHelper.PETITION_NUMBER_KEY + " = '" + petition_number + "'"; 

    c = super.query(query); 

    if ((c.equals(null) || c.getCount() == 0 || !c.moveToFirst())) { 

    } else { 
     c.moveToFirst(); 

     status = c.getString(c.getColumnIndex(DatabaseHelper.SENT_SUPPORT)); 
    } 

    return status; 
} 

код в службы:

mPetitionsTableDbAdapter = DatabaseHelper.get(getApplicationContext()).getPetitionsTableDbAdapter(); 
               mPetitionsTableDbAdapter.beginTransaction(); 
               try { 

                mPetitionsTableDbAdapter.updateStatus(member_id, e_petition_no, petition_no, "1"); 
                mPetitionsTableDbAdapter.setTransactionSuccessful(); 


               } catch (Exception e) { 
                e.printStackTrace(); 
               } finally { 
                mPetitionsTableDbAdapter.endTransaction(); 
               } 

               String status = mPetitionsTableDbAdapter.getStatus(petition_no); 
               Log.d(Const.DEBUG, "Status: " + status); 

Мой Logcat:

Begin Transaction 
10-12 18:36:55.104 17865-19023/com.xxx.xx D/xx: Row in table petitions_table updated member_id = 2199683 AND e_petition_number = 31 AND petition_number = '31T8' 
10-12 18:36:55.104 17865-19023/com.xxx.xx D/xx: Transaction Successful 
10-12 18:36:55.104 17865-19023/com.xxx.xx D/xx: End Transaction 
10-12 18:36:55.104 17865-19023/com.xxx.xx D/xx: Query 'SELECT sent_support FROM petitions_table WHERE petition_number = '31T8'' returned 1 rows 
10-12 18:36:55.104 17865-19023/com.xxx.xx D/xx: Status: 0 

Я пытаюсь установить значение SENT_SUPPORT равным 1 и прочитать его после транзакции. Он всегда возвращает 0, это значение по умолчанию, которое я вставил при создании строки. Если вам нужна какая-либо другая часть кода, дайте мне знать.

Примечание: для определенного номера петиции есть только 1 строка.

+2

Ваш запрос на обновление имеет намного более строгий whereClause thatn в выбранном запросе. Возможно, обновление не соответствует строкам. – laalto

+0

Вы были правы, запрос на обновление получал неправильный параметр от вызывающего. Спасибо .. –

ответ

0

Просто, чтобы закрыть этот вопрос.

Ответ: Метод обновления получал неправильный аргумент из его вызывающего метода. Следовательно, выход был не таким ожидаемым. Спасибо, что указали, что не может быть никаких совпадений для оператора обновления.

1

Вам может понадобиться, чтобы избежать символы, такие как ' в запросах

Для получения дополнительной информации, пожалуйста, проверьте SO вопрос How to escape special characters like ' in sqlite in android

+0

Но, похоже, что вопрос в порядке. Как вы думаете, я использую неправильные? –

+0

@ VamsiChalla внутри вашего метода updateStatus, где последняя строка предложения '"+ pno +"' " –

+0

@ VamsiChalla и запрос getStatus имеют ту же ошибку –

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