Android sqlite3 说 "no _id"但表肯定有

标签 android sqlite

不知何故,在调试一个基于位置的 Android 应用程序时,我遇到了一个奇怪的异常。看看并分享您的想法:

我已通过 ContentProviderListActivity 连接到 sqlite3 数据库。现在,当我启动 ListActivity 时,程序总是会终止并出现异常告诉我

column '_id' does not exist

(没有表名)为我为 ListActivity 创建 SimpleCursorAdapter 对象的行。

    Cursor cursor = managedQuery(intent.getData(), new String[] {TrackTable.START_LOC, TrackTable.END_LOC}, null, null,
            TrackTable.DEFAULT_SORT_ORDER);
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.gps_track_entry, cursor, new String[] {
                    TrackTable.COLUMN_NAME_TIME_START,
                    TrackTable.COLUMN_NAME_TIME_END
                }, new int[] { R.id.l_start, R.id.l_end });

我的数据库看起来像这样:

sqlite> .tables
.tables
android_metadata ocation track
sqlite> . schema track
.schema track
CREATE TABLE track (
  _id INTEGER PRIMARY KEY,
  start_location INTEGER,
  end_location INTEGER,
  start_time TEXT,
  end_time TEXT
);
sqlite> .schema location
.schema location
CREATE TABLE location (
  _id INTEGER PRIMARY KEY,
  long TEXT,
  lat TEXT,
  alt TEXT,
  accu TEXT,
  bear TEXT,
  sped TEXT,
  time TEXT);
sqlite> .schema android_metadata
.schema android_metadata
CREATE TABLE android_metadata (locale TEXT);

我的意思是,这个错误不太可能是 Android 错误,但看起来确实很像,因为唯一没有 _id 的表是 android_metadata。但也许我以一种奇怪的方式写了一些东西,虚拟机现在认为我想使用 android_metadata 而不是 track,而我实际上想使用它。

最佳答案

埃里希就在上面;问题是您的 SELECT 查询需要包含 BaseColumns._ID 作为投影的一部分。像这样的东西:

Cursor cursor = getContentResolver().query(TrackTable.CONTENT_URI, 
        new String[] { TrackTable._ID, TrackTable.COLUMN_NAME_TIME_START,
        TrackTable.COLUMN_NAME_TIME_END }, null, null, null);

顺便说一句,请参阅 CursorAdapter 的 javadoc :

The Cursor must include a column named "_id" or this class will not work.

关于Android sqlite3 说 "no _id"但表肯定有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7272176/

相关文章:

sql - 更新列以删除 SQLite 中之前的所有内容并包括空格

java - 即使应用成功地从 Assets 文件夹打开数据库,也没有找到这样的表

android - 是否可以在 Android 上构建类似 WebOS 的 UI 应用程序

sqlite - 在 SQLite 中使用 ForeignCollections

ios - Swift 3 - SQLite 包装器

ios - SQLite 查询在 iPhone 中不起作用

python - 使用 df.to_sql() 将 block 写入数据库时​​出现 Pandas 错误

android - 如何以编程方式将 2 个 android 设备与蓝牙连接?

像自动更正这样的代码需要 Java 帮助

android - 外部 HTML Assets 未被 React Native bundle 在生产构建中以供 Webview 使用