0

次のコードを使用して SQLite データベースから読み取ろうとしています。

 public List<DBEntry> getAllDBEntrys() {
    List<DBEntry> DBEntrys = new ArrayList<DBEntry>();

    Cursor cursor = database.query(DatabaseClass.TABLE_APPTS,
        allColumns, null, null, null, null, null);

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
      DBEntry DBEntry = cursorToDBEntry(cursor);
      DBEntrys.add(DBEntry);
      cursor.moveToNext();
    }
    // Make sure to close the cursor
    cursor.close();
    return DBEntrys;
  }
      private DBEntry cursorToDBEntry(Cursor cursor) {
    DBEntry DBEntry = new DBEntry();
    DBEntry.setId(cursor.getLong(0));
    DBEntry.setName(cursor.getString(1));
    DBEntry.setStartDate(new Date(cursor.getLong(2)));
    DBEntry.setDueDate(new Date(cursor.getLong(3)));
    DBEntry.SetPriority(cursor.getInt(4));
    DBEntry.setDesc(cursor.getString(5));
    DBEntry.SetCompletion(cursor.getInt(6)==1?true:false);
    return DBEntry;
  }

次のエラーが表示されます。

01-23 16:35:23.509: E/CursorWindow(14609): Failed to read row 0, column 6 from a CursorWindow which has 1 rows, 6 columns.

sqlite3 ユーティリティが示すように、データベースには既に 1 つのエントリがあります。

sqlite> select * from ThingsToDo;
0|asdf|1358847122203|1359192722202|7|abcd|0
sqlite> .schema
CREATE TABLE ThingsToDo( _id integer primary key autoincrement,name text not null,start_date integer,due_date integer,priority integer,description text, completed integer);
CREATE TABLE android_metadata (locale TEXT);

cursor.getColumnCount()PC にファイルを移動したときに sqlite3 ユーティリティが示したように、関数が 7 ではなく 6 を返すため、_id 列が列としてカウントされないことが問題だと思います。どうすればこれを機能させることができますか?

4

1 に答える 1

1
 public List<DBEntry> getAllDBEntrys()
    {
        List<DBEntry> DBEntrys = new ArrayList<DBEntry>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_APPTS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) 
        {
            do 
            {
                DBEntry DBEntry = new DBEntry();
                DBEntry .setID(Integer.parseInt(cursor.getString(0)));
                DBEntry .setName(cursor.getString(1));
                DBEntry .setPhoneNumber(cursor.getString(2));
                // Adding to list
                DBEntrys .add(DBEntry );
            } while (cursor.moveToNext());
        }

        // return list
        return DBEntrys ;
    }
于 2013-01-23T05:55:35.547 に答える