目前,SQLiteDatabase 中的更新函数使用 String[] 作为 Where 参数。
update(String table, ContentValues values, String whereClause, String[] whereArgs)
我觉得这很奇怪
A)通常使用 ContentValues 对象传递值:我可以传递实际对象,SQLiteDatabase 将使用其本机绑定函数正确转换它。
例如,我可以将 Content Value 放入 Long 并且 SQLiteDatabase 将在插入期间正确转换它。
put(String key, Long value)
B)但是,对于 Where 条件,我需要自己将值实际转换为字符串。当然,在大多数情况下,这不是问题,因为 .toString() 可以完成这项工作。但是在某些情况下,转换并不是那么直接,例如:
- 要隐藏浮点数,我应该使用“。” 或“,”作为小数点(这因国家而异)?
- 如何将空值转换为字符串?
问题:
问题 1) 您对使用 Where 语句的最佳实践有什么建议吗?
问题 2) 有没有办法将 whereArgs 作为 ContentValues 传递,以便使用本机绑定进行转换?
问题3)如果我将String[]用作whereArgs,我会遇到一个不对齐的情况:插入本身使用原生绑定函数,但where语句需要自己转换。我觉得这会产生一些冲突(例如,我插入浮点“5.2”,但后来我用“5,2”更新了行搜索)。
问题 3.1) 有人遇到过类似的问题吗?解决方法是什么?
问题 3.2)为了对齐 2 种转换,我想始终注意转换为字符串:所以只传递给 ConcentValues 字符串(由我转换)+当然要对字符串使用相同的转换 [ ] WhereArgs。这会是一个解决方案吗?您可以预见到哪些缺点?
提前感谢大家对恩里科的支持