Op dit moment heb ik mijn code er zo uit zien:
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);
}
Ik heb geen documentatie gevonden over hoe Android kolommen heeft toegewezen aan indices, dus hoewel ik heb bevestigd dat deze is gebaseerd op de volgorde waarin de kolommen in de query zijn vermeld, heb ik geen garantie dat dit 100% van de kolommen zal werken de tijd, of dat toekomstige updates dit gedrag zullen behouden. De voordelen van het gebruik van getColumnIndexOrThrow (...)
is de garantie dat mijn indices altijd correct zullen zijn, zolang de kolommen waarnaar ze verwijzen in de query worden opgenomen. Het nadeel is dat het, naast de verveling, mijn code veel moeilijker maakt om te lezen en de duur van mijn methoden enorm vergroot. Aan de andere kant zou ik gewoon de indices kunnen opgeven zonder getColumnsIndexOrThrow
aan te roepen, en dat zou mijn code verkorten, maar door het gebrek aan documentatie voelt het verkeerd.