2013-04-09 6 views
0

Я хочу удалить строку в базе данных sqlite. Пожалуйста, обратитесь к sql datastructure и моему текущему методу удаления, который не работает.SQLite Android Удалить строку базы данных

private static final String[] TABLE_MESSAGE_FIELDS = { 
     FIELD_USERNAME,  "CHAR(32) NOT NULL", 
     FIELD_READED,  "INTEGER(1) NOT NULL", 
     FIELD_SEND,   "INTEGER(1) NOT NULL", 
     FIELD_TIMESTAMP, "INTEGER(64) NOT NULL", 
     FIELD_CONTENT,  "TEXT NOT NULL", 
    }; 

    //more tables 
    private static final String[] TABLE_MESSAGE_INDEXS = { 
     FIELD_USERNAME, FIELD_READED, 
    }; 

Это структура, в основном это мессенджер (IM) приложение для Android, так что пользователь может отправлять и получать сообщения. В то время как операции, такие как получение сообщения и т. Д., Работают, опция удаления - нет.

Я ищу, чтобы удалить весь разговор между пользователем, другими словами, не индивидуальное сообщение в разговоре, а весь разговор сам. Я предполагаю, что правильный путь - узнать имя пользователя и удалить всю строку. Таблица TABLE_MESSAGE_FIELDS содержит 5 столбцов, указывающих сообщение, я хочу удалить весь этот разговор.

Это, как я иду об этом

public boolean deleteMessage(String userName) 
{ 

    SQLiteDatabase database = mLocalDatabase.getWritableDatabase(); 
    final String[] COLUMNS = { FIELD_TIMESTAMP, FIELD_CONTENT }; 
    final String SELECTION = FIELD_USERNAME + "=?" ; 
    //database.beginTransaction();//do i need this? 
    boolean result= database.delete(TABLE_MESSAGE,SELECTION,new String[]{userName})>=0; 
    //database.endTransaction();//?? 
    database.close(); 
    return result; 
    } 
+0

так где вопрос то? ... ваш код выглядит OK форму мне ... Remeber ... он не будет изменять данные в ListView без дополнительного кодирования ... – Selvin

+0

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

+0

Каков результат возврата? И есть ли какое-то исключение? –

ответ

1

Предполагая, что вы объявлены правильно создать запрос и все работает, ваш код выглядит правильно, так причина, почему ваша строка (s) не удаляется из базы данных может быть, что вы при условии неправильного имени пользователя, т.е. каждая строка в базе данных не равна указанному userName. Попробуйте распечатать переменную перед выполнением действия удаления.

Тогда, упомянутый сделка. Если вы использовали его, вам нужно позвонить

setTransactionSuccessful() 

или ваши изменения будут откат и база данных будет вернуться к состоянию до сделки.

boolean result = false; 
db.beginTransaction(); 
result = db.delete(TABLE_MESSAGE, SELECTION, new String[] {userName}) > 0; 
db.setTransactionSuccessful(); 
db.endTransaction(); 
+0

android.database.sqlite.SQLiteException: нет такого столбца: FIELD_USERNAME (код 1): при компиляции: УДАЛИТЬ ОТ сообщений WHERE FIELD_USERNAME =? Не знаете, почему ??? – Mikelbstek

+0

@Mikelbstek Ваша колонка не существует. проверьте схему таблиц. – Sajmon

+0

Хорошо, мне удалось решить проблему с такими столбцами, однако проблема все еще остается. Я не могу удалить сообщение – Mikelbstek

-1
public boolean deleteMessage(String userName) { 
    boolean result = false; 
    if (userName != null && !userName.equals("")) { 
     userName = userName.trim(); 

     SQLiteDatabase database = mLocalDatabase.getWritableDatabase(); 
     // final String[] COLUMNS = { FIELD_TIMESTAMP, FIELD_CONTENT }; 
     // final String SELECTION = FIELD_USERNAME + "=?" ; 
     // database.beginTransaction();//do i need this? 
     String whereCondition = FIELD_USERNAME + "=" + userName; 
     result = database.delete(TABLE_MESSAGE, whereCondition, null); 
     // database.endTransaction();//?? 
     database.close(); 

    } 
    return result; 

} 
+0

не работает, ошибка времени выполнения говорит, что столбец не найден.В вашем коде вы пытаетесь присвоить имя столбца как неправильное имя пользователя – Mikelbstek

+0

FIELD_USERNAME должно быть вашим именем столбца, а TABLE_MESSAGE - это имя вашей таблицы –

+0

Если аргументы являются правильным способом, конкатенация строк является проблематичной –

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