现在,我的代码如下所示:
SqlTables.java:
// Separate file
public enum SqlTables {
TABLE_1("table_1"),
.
.
.
TABLE_N("table_n");
final String name;
private SqlTables(String name) {
this.name = name;
}
}
Table1Columns.java:
// Separate file
public enum Table1Columns {
...
}
SqlDatabaseInterface.java:
Cursor c = db.query(SqlTables.TABLE_1.toString(), null...);
final int indexId = c.getColumnIndexOrThrow(
Table1Columns.ID.toString());
final int indexName = c.getColumnIndexOrThrow(
Table1Columns.NAME.toString());
while (c.moveToNext()) {
final String id = c.getString(indexId);
final String name = c.getString(indexName);
}
我没有找到任何关于 Android 如何将列映射到索引的文档,所以虽然我已经确认它是基于查询中列的顺序,但我不能保证这将 100% 有效时间,或者未来的更新将保持这种行为。使用的好处getColumnIndexOrThrow(...)
是保证我的索引总是正确的,只要它们引用的列包含在查询中。缺点是,除了乏味之外,它使我的代码更难阅读,并大大增加了我的方法的长度。另一方面,我可以只指定索引而不调用getColumnsIndexOrThrow
,这会缩短我的代码,但是缺少文档会让人感觉不对。