現在、コードは次のようになっています。
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
ばコードは短くなりますが、ドキュメントがないため、間違っているように感じられます。