我发现为了让Android CursorAdapter类工作,我需要一行_id.现在,我有一个特定的命名方案,并且不希望将我的id列(称为ID)更改为_id,因为我需要CursorAdapters的所有表.我认为这会影响我的一些复杂查询的可读性 - 加上"_id"是丑陋的:P.
我正在讨论使用自定义"TableID as _id"选择查询,但我喜欢SQLiteDatabase的好查询方法,看起来它们不支持在查询中重命名列.
总是需要特定的表列名称似乎相当不灵活(而且很奇怪).有没有办法指定要用作CursorAdapter的id列的列?或者也许是我没有想过的另一种解决方法?
bma*_*pin 13
不需要使用原始查询,CursorWrapper等.您可以完全按照上面提到的那样做:当您为查询指定列时,只需将"TableID as _id"指定为其中之一.实际上,我会使用BaseColumns._ID而不是_id.像这样的东西应该工作得很好:
static final String[] columns = new String[] {
"TableID AS " + BaseColumns._ID,
...
};
Run Code Online (Sandbox Code Playgroud)
然后将其传递给您用于创建光标的任何内容(SQLiteDatabase,CursorLoader等)
我还建议将列名放入您可以在整个应用程序中引用的字符串常量,例如MyDatabase.TABLE_ID,以上情况就是如此MyDatabase.TABLE_ID + " AS " + BaseColumns._ID
Squ*_*onk 10
您的数据库不需要有一个名为'_id'的列,但CursorAdaptor确实需要返回一个.您可以在rawQuery中使用别名(例如"TableID as _id"构思)来执行此操作.
一个例子是我有一个带有列的表...
uid,name,number
Run Code Online (Sandbox Code Playgroud)
要查询SimpleCursorAdapter(例如),我使用数据库执行此操作rawQuery...
db.rawQuery("SELECT uid as _id,name,number FROM MY_TABLE");
Run Code Online (Sandbox Code Playgroud)
这很好,并为SimpleCursorAdapter提供必要的'_id'列.
| 归档时间: |
|
| 查看次数: |
4596 次 |
| 最近记录: |