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)の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;
    }
4

2 に答える 2

1

create query を正しく宣言し、すべてが機能すると仮定すると、コードは正しく見えるため、データベースから行が削除されない理由は、間違ったユーザー名を指定したこと、つまりデータベース内の各行が指定された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 に答える