0

リマインダーを保存する SQLiteOpenHelper サブクラスを作成しました。次のように、このクラスにテーブルを作成します。

public static final String TABLE = "Reminders";
public static final String ID = "id";
public static final String COMPLETE = "complete";
public static final String PRIORITY = "priority";
public static final String DATE = " alarmdate";
public static final String TITLE = "title";
public static final String NOTES = "notes";

@Override
public void onCreate(SQLiteDatabase db) {
    String create = "CREATE TABLE " + TABLE + "(\n" 
            + ID + " INTEGER PRIMARY KEY, \n" 
            + COMPLETE + " INTEGER DEFAULT 0, \n" 
            + PRIORITY + " INTEGER DEFAULT 1, \n"
            + DATE + " CHAR(21) DEFAULT NULL, \n"
            + TITLE + " TEXT NOT NULL, \n" 
            + NOTES + " TEXT DEFAULT NULL \n"
            + ");";
    db.execSQL(create);
}

データベースは正常に作成され、エントリを正常に追加できます。

問題は、データベースから行を取得したいときに、cursor.getColumnIndex(DATE) が -1 を返し、他のフィールドの正しいインデックスを返すことです。

//Method of the helper class
public Reminder getReminder(int _id) {
    Reminder r;

    SQLiteDatabase db = getReadableDatabase();
    String query = String
            .format("SELECT * FROM %s WHERE ID=%d", TABLE, _id);
    Cursor cursor = db.rawQuery(query, null);

    cursor.moveToFirst();

    if (cursor.isAfterLast())
        return null;

    boolean complete = (cursor.getInt(cursor.getColumnIndex(COMPLETE)) != 0);
    int priority = cursor.getInt(cursor.getColumnIndex(PRIORITY));
    String dateS = cursor.getString(cursor.getColumnIndex(DATE)); //cursor.getColumnIndex(DATE) returns -1;

    //etc...
    cursor.close();

getColumnIndex() は他のすべてのフィールドに対して有効なインデックスを返すため、これは非常に面倒です。

さらに、cursor.getString(3)の代わりに を呼び出すとcursor.getString(cursor.getColumnIndex(DATE))、日付の値が正しく取得されます。

これの原因は何ですか?どうすれば修正できますか?

4

1 に答える 1

2

から先頭のスペースを削除してみてください" alarmdate"

それでもうまくいかない場合は、に変更CHAR(21)してみてくださいTEXT。これは、SQLite に関する限り、まったく同じことを意味します。

于 2012-08-02T21:57:44.217 に答える