Android列‘_id’不存在吗?

Android列‘_id’不存在吗?

我在记事本的例子中遇到了问题。下面是NotepadCodeLab/NotepAdvanc1S卷积的代码:

String[] from = new String[] { NotesDbAdapter.KEY_TITLE };int[] to = new int[] { R.id.text1 };
SimpleCursorAdapter notes = new SimpleCursorAdapter(this,R.layout.notes_row, c, from, to);

这段代码似乎运行良好。但我要澄清的是,我运行了亚行工具并运行SQLite 3。

sqlitt>.schema

CREATE TABLE android_metadata (locale TEXT);CREATE TABLE notes (_id integer primary key autoincrement, title textnot null, body text not null);

我觉得一切都很好。


现在来看我的应用程序,据我所见,它基本上是一样的,只是做了一些小改动。我已经简化和简化了我的代码,但问题仍然存在。

String[] from = new String[] { "x" };int[] to = new int[] { R.id.x };SimpleCursorAdapter adapter = null;try{
    adapter = new SimpleCursorAdapter(this, R.layout.circle_row, cursor, from, to);}catch (RuntimeException e){
    Log.e("Circle", e.toString(), e);}

当我运行我的应用程序时,我得到一个RuntimeException,并在logcat中从Log.e()声明:

logcat消息:

java.lang.IllegalArgumentException:列‘_id’不存在

因此,回到SQLite 3,看看我的模式有什么不同:

模式创建表Android_元数据(地区文本);创建表圆(_id整数主键自动增量、序列整数、半径实数、x实、y实);

我不知道我怎么会错过‘_id’。

我做错了什么?

我的应用程序和记事本示例之间的一个不同之处是,我使用Eclipse向导从头开始创建应用程序,而示例应用程序已经放在一起。对于使用SQLite数据库的新应用程序,是否需要进行某种环境更改?


湖上湖
浏览 316回答 3
3回答

慕码人2483693

这是回答我想在这里把它做得更全面。SimpleCursorAdapter要求游标的结果集必须包括一个名为“_id”的列。如果没有在表中定义“_id”列,请不要急于更改模式。SQLite为每个表自动添加了一个名为“rowid”的隐藏列。只需显式选择rowid并将其别名为‘_id’Ex即可。SQLiteDatabase db = mHelper.getReadableDatabase();       Cursor cur =  db.rawQuery( "select rowid _id,* from your_table", null);

浮云间

如果您正在使用db.query,那么它将是这样的.。db.query(TABLE_USER, new String[] {                  "rowid _id",                 FIELD_USERNAME,                 },                  FIELD_USERNAME + "=" + name,                  null,                  null,                  null,                  null);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android