- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在,我的代码如下所示:
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% 的时间,或者 future 的更新将保留此行为。使用 getColumnIndexOrThrow(...)
的好处是保证我的索引始终正确,只要它们引用的列包含在查询中。缺点是,除了乏味之外,它还使我的代码更难阅读,并大大增加了我的方法的长度。另一方面,我可以在不调用 getColumnsIndexOrThrow
的情况下只指定索引,这会缩短我的代码,但缺少文档让人感觉不对。
最佳答案
不,您绝对不应该不将列索引值硬编码到您的代码中。如果这样做,您的数据库将几乎无法管理(因为对表进行更改可能会导致索引值发生更改)。
据我所知,您的代码难以阅读,因为:
您正在用对 toString()
的不必要调用来破坏您的代码。摆脱它们……它们完全是多余的。
您过多地使用了 final
关键字,这使您的代码变得困惑。在您可能不小心更改变量值的情况下,这应该用作预防措施。这不是那些情况之一......
您将简单的语句分散到多行中。只需使用一行,阅读起来就会轻松很多。
也就是说,从技术上讲,上述任何编码实践都没有错。我只是说,如果您真的关心让您的代码易于阅读,那么您可能希望将它们视为建议。
关于安卓 SQLite : Is it a good practice to call getColumnIndex when retrieving values from a table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11174171/
我是一名优秀的程序员,十分优秀!