-1

私はこのステートメントで作成されたデータベースを持っています:

DATABASE_CREATE = "create table "
        + TABLE_BANDS + "(" + COLUMN_ID
        + " integer primary key autoincrement, " + COLUMN_NAME
        + " text unique not null, " + COLUMN_GENDER + " text, " + COLUMN_POPULARITY + " real not null);";

次のステートメントを含む行を追加します。

private long addBand(String bandName, String gender) {
    ContentValues values = new ContentValues();
    values.put(BandsSQLiteOpenHelper.COLUMN_NAME, "\"" + bandName.trim().toLowerCase() + "\"");
    values.put(BandsSQLiteOpenHelper.COLUMN_POPULARITY, 1);
    values.put(BandsSQLiteOpenHelper.COLUMN_GENDER, "");
    long insertId = database.insert(BandsSQLiteOpenHelper.TABLE_BANDS, null,
            values);

    return insertId;
}

insertId > 0 になったので、挿入はOKだったと思います。

次に、このコードで挿入した行を選択しようとします。

public Band getBand(String name) {
    Cursor cursor = database.query(BandsSQLiteOpenHelper.TABLE_BANDS,
            new String[] {BandsSQLiteOpenHelper.COLUMN_NAME, BandsSQLiteOpenHelper.COLUMN_POPULARITY}, BandsSQLiteOpenHelper.COLUMN_NAME + " = \"" + name.trim().toLowerCase() + "\"", null,
            null, null, null);

    cursor.moveToFirst();
    Band band = getBandFromCursor(cursor);
    cursor.close();
    return band;
}

しかし、常に長さ0のカーソルが返されます。名前の周りの引用符を削除しようとしましたが、クエリを実行した後は機能しません。

その上、rawQueryを使用しようとしましたが、結果は同じです。

Cursor cursor = database.rawQuery("Select * from " + BandsSQLiteOpenHelper.TABLE_BANDS + " where band_name = \"" + name.trim().toLowerCase() + "\"", null);

アップデート:

一重引用符を試しました:

Cursor cursor = database.query(BandsSQLiteOpenHelper.TABLE_BANDS,
            new String[] {BandsSQLiteOpenHelper.COLUMN_NAME, BandsSQLiteOpenHelper.COLUMN_POPULARITY}, BandsSQLiteOpenHelper.COLUMN_NAME + " = \'" + name.trim().toLowerCase() + "\'", null,
            null, null, null);

private long addBand(String bandName, String gender) {
    ContentValues values = new ContentValues();
    values.put(BandsSQLiteOpenHelper.COLUMN_NAME, "\'" + bandName.trim().toLowerCase() + "\'");
    values.put(BandsSQLiteOpenHelper.COLUMN_POPULARITY, 1);
    values.put(BandsSQLiteOpenHelper.COLUMN_GENDER, "");
    long insertId = database.insert(BandsSQLiteOpenHelper.TABLE_BANDS, null,
            values);

    return insertId;
}

以前と同様に、挿入は問題ありませんが、選択すると 0 行が返されます。

4

1 に答える 1

1

値を挿入するとき、DB 作成文字列でフィールドがTEXT.

あなたのrawQueryについては、これを試してください: "SELECT * FROM " + BandsSQLiteOpenhelper.TABLE_BANDS + " WHERE band_name = '" + name.trim().toLowerCase() + "'";

WHERE ステートメントで文字列を識別子として使用する場合は、二重引用符ではなく単一引用符を使用してください。

于 2013-11-02T10:33:01.797 に答える