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意味着该列不存在于Cursor. 假设您将未更改的投影(null此处)传递ContentProvider给正确的表,您可以确定该列在数据库中不存在。

通常的原因是您在稍后阶段添加/重命名了列,但忘记将数据库升级到新版本。这不是自动发生的。

在您的数据库版本中SQLiteOpenHelper添加或从系统设置中删除您的应用程序数据,以查看是否添加了该列。

于 2012-08-31T11:53:11.160 回答