gpt4 book ai didi

安卓 SQLite : Is it a good practice to call getColumnIndex when retrieving values from a table?

转载 作者:行者123 更新时间:2023-11-29 18:10:10 31 4
gpt4 key购买 nike

现在,我的代码如下所示:

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 的情况下只指定索引,这会缩短我的代码,但缺少文档让人感觉不对。

最佳答案

不,您绝对不应该将列索引值硬编码到您的代码中。如果这样做,您的数据库将几乎无法管理(因为对表进行更改可能会导致索引值发生更改)。

据我所知,您的代码难以阅读,因为:

  1. 您正在用对 toString() 的不必要调用来破坏您的代码。摆脱它们……它们完全是多余的。

  2. 您过多地使用了 final 关键字,这使您的代码变得困惑。在您可能不小心更改变量值的情况下,这应该用作预防措施。这不是那些情况之一......

  3. 您将简单的语句分散到多行中。只需使用一行,阅读起来就会轻松很多。

也就是说,从技术上讲,上述任何编码实践都没有错。我只是说,如果您真的关心让您的代码易于阅读,那么您可能希望将它们视为建议。

关于安卓 SQLite : Is it a good practice to call getColumnIndex when retrieving values from a table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11174171/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com