我对它的设计很好奇Android SQLite API http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html。例如,我们有
public void execSQL(String sql, Object[] bindArgs)
对于不返回数据的 SQL,我们还有
public Cursor rawQuery(String sql, String[] selectionArgs)
对于确实返回数据的 SQL。
为什么前者的参数应为对象数组,而后者的参数应为字符串数组?我知道由于 SQLite 的原因,只接受字符串可能是有意义的类型亲和力 http://www.sqlite.org/datatype3.html#affinity。但是,如果是这样,为什么不始终使用字符串数组作为参数呢?是否有一些非字符串参数有意义execSQL
但不是为了rawQuery
?
实际上,只接受字符串确实not这是有道理的,因为字符串永远不会与数字比较相等,即像这样的查询
c.rawQuery("SELECT * FROM mytable WHERE some_number_column = ?", args);
永远不会返回任何带有数字的记录。 (您必须将所有列声明为TEXT
,并且永远不要使用表达式或将它们转换为类似CAST(... AS TEXT)
.)
Jens 提到了一个可能的解释,但这并不能成为不一致和糟糕设计的借口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)