栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用查询字符串在Android SQLiteDatabase中执行插入/更新/删除的正确方法是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用查询字符串在Android SQLiteDatabase中执行插入/更新/删除的正确方法是什么?

你是对的。该文档令人困惑。总体而言,该设计尝试围绕sqlite3 C
API提供一个方便的Java包装器。在大多数情况下,如果按照设计人员的预期使用它(例如使用CRUD操作的便捷方法),它就可以正常工作。但是,他们还需要提供原始查询方法,

execSQL()
以及
rawQuery()
在便利性CRUD方法功能不足或根本不适用的情况下(
CREATETABLE
等等)。这导致泄漏抽象。

该文档说,

rawQuery
该语句不能以分号结尾,但实际上似乎没有任何区别。这对我来说很重要,因为我们有一个巨大的XML文档,其中填充了我在多个平台上的应用程序中使用的查询,并且我希望尽可能保持相同。

该文档是不好的。实际上,Android

SQLiteDatabase
本身使用分号终止的查询字符串进行调用
rawQuery

rawQuery
似乎不适用于插入内容(是的,我尝试使用和不使用分号)。这位医生对此一无所知。我确实看到它返回了一个Cursor,我想这可能是一个斜线提示,它仅适用于select,但不一定如此-
当没有结果集时,它可以简单地返回零长度或null的Cursor。

确实可以 工作,但是您需要了解它在本机级别如何工作。

想想

execSQL()
作为
sqlite3_exec()
运行查询,并返回成功或错误代码。

可以认为

rawQuery()
sqlite3_prepare()
可以编译查询但尚未运行它。要实际运行它,请使用上的一种
moveTo...()
方法
Cursor
。认为这是
sqlite3_step()
。结合任何
rawQuery()
moveTo...()
居然会改变数据库。

execSQL(String sql, Object[] bindArgs)
明确表示它不适用于选择,但实际上可以!

此外,尽管

execSQL(String,Object[])
明确告诉您不要尝试CRUD操作,但其无参数版本不包含此类警告,并且也可以正常工作(缺点是不允许使用SQL参数)。

它适用于所有CRUD操作。对于CRUD的R读取部分,根本无法获取所选数据。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569281.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号