0

自動インクリメントを使用して、Android で作成した SQL テーブルから行 ID (_id) を取得しようとしています。主キー フィールドを除くテーブル内の他のすべてのフィールドを確認できます。この id はテーブルのコードです:

public static final String ID = "_id";
public static final String JOKE = "Joke";
public static final String AUTHOR = "Author";
public static final String DATE = "Date";
public static final String STATUS = "Status"; 
public void onCreate(SQLiteDatabase db) {
  db.execSQL("CREATE TABLE " + TABLE_NAME + " ( " 
            + ID  + " INTEGER PRIMARY KEY AUTOINCREMENT , " 
            + JOKE + " TEXT, " 
            + AUTHOR + " TEXT, " 
            + DATE + " DATE, " 
            + STATUS + " TEXT " 
            + ")");         
    }    

フィールドのインデックスを取得しようとすると、フィールド ID に -1 が返されます

Cursor cur = context.getContentResolver().query(MyContentProvider.CONTENT_URI, null, null, null, null); 
if (cur.moveToFirst()) {
        int idColumn = cur.getColumnIndex("_id");
        int authorColumn = cur.getColumnIndex("Author");
        int statusColumn = cur.getColumnIndex("Status"); 
        int dateColumn = cur.getColumnIndex("Date");    

他のすべてのフィールドのインデックスを見ることができますが、キー フィールド (_id) は誰でも助けてくれますか?

4

2 に答える 2

0

この方法でキーを取得してみてください。

id = cur.getInt(0);
于 2012-08-31T11:16:09.117 に答える
0

cur.getColumnIndex("_id")を返す-1ことは、この列が に存在しないことを意味しますCursornull変更されていない内部のプロジェクション (ここ) を正しいテーブルに渡すと仮定するとContentProvider、この列がデータベースに存在しないことを確認できます。

通常の理由は、後の段階で列を追加/名前変更したが、データベースを新しいバージョンにアップグレードするのを忘れたことです。それは自動的に起こっているわけではありません。

データベースのバージョンを上げるSQLiteOpenHelperか、システム設定からアプリ データを削除して、列が追加されるかどうかを確認します。

于 2012-08-31T11:53:11.160 に答える