0

我想删除 sqlite 数据库中的一行。请参考 sql 数据结构和我当前不起作用的删除方法。

    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)安卓应用,所以用户可以发送和接收消息。虽然接收消息等操作正在运行,但删除选项却没有。

我希望删除用户之间的整个对话,换句话说,不是对话中的单个消息,而是整个对话本身。我想正确的方法是找出用户名,然后删除整行。表 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;
    }
4

2 回答 2

1

假设您已正确声明创建查询并且一切正常,您的代码看起来正确,因此未从数据库中删除行的原因可能是您提供了错误的用户名,即数据库中的每一行不等于给定的userName。在执行删除操作之前尝试打印您的变量。

然后,你提到了交易。如果你使用它,你需要打电话

setTransactionSuccessful()

否则您的更改将被回滚,并且数据库将恢复到事务之前的状态。

boolean result = false;
db.beginTransaction();
result = db.delete(TABLE_MESSAGE, SELECTION, new String[] {userName}) > 0;
db.setTransactionSuccessful();
db.endTransaction();
于 2013-04-09T08:24:38.030 回答
-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;

}
于 2013-04-09T10:19:45.143 回答