使用rawquery和execSQL的确切区别是什么? 在android活动中编写查询时,何时使用rawquery以及何时使用execSQL?在android sqlite数据库中rawquery和execSQL的区别
36
A
回答
68
从API文档:
执行一个SQL语句不是SELECT或返回数据的任何其他SQL语句。
void execSQL (String sql, Object[] bindArgs)
执行一个SQL语句是不是一个SELECT/INSERT/UPDATE/DELETE。
文档不一致,但它们的行为都相同。后者的文档更深入。
Cursor rawQuery (String sql, String[] selectionArgs)
运行提供的SQL,并返回在结果集的光标。
的用途rawQuery
是:
- 您想用
SELECT
语句来查询数据库。
=>rawQuery("SELECT ...
返回Cursor
中的一组行和列。- 这是更有效地使用的情况下
DatabaseUtils.longForQuery(SQLiteDatabase, String, String[])
或DatabaseUtils.stringForQuery(...)
只有一个1x1的查询结果,如从SELECT count(*) FROM table
(其中也有它自己的专用方法:DatabaseUtils.queryNumEntries(...)
) - 此跳过Cursor
对象&简化了,因为有代码的创建也没什么关闭,使用MoveToNext等
- 这是更有效地使用的情况下
- 特殊情况下,像
PRAGMA table_info
返回行数据(见this question) - 注意:不要不使用
rawQuery
代替INSERT
,UPDATE
或DELETE
或其他任何修改数据库的内容。你会遇到"Why does a delete rawQuery need a moveToFirst in order to actually delete the rows?"。原因是查询可能推迟读取结果直到需要(=访问游标),这意味着SQLite延迟execution of the statement。
的用途execSQL
是:
- 你 “指令” 数据库。与
CREATE TABLE
(或任何其他CREATE
陈述,例如,CREATE INDEX
),DROP
,PRAGMA
s表示设置的属性,而不是返回他们,... INSERT
,UPDATE
或DELETE
当你不感兴趣修改行的数量或最后插入的行ID。- 当你需要的,无论是使用
update()
,insert()
,delete()
方法或使用第二个语句来读取这些:DatabaseUtils.longForQuery
与任何SELECT last_insert_rowid()
或SELECT changes()
。两者都只返回1个整数值。 (请参阅"Get updated rows count from SQLite in Android using a raw query?"和“SELECT last_insert_rowid()” returns always “0”)
- 当你需要的,无论是使用
- 其他任何依赖执行语句的东西。
11
,如果你想在不涉及其输出以执行数据库的东西(例如,创建/修改表),然后用execSQL,但如果你是在对你的查询有所回报了一定的成果(如选择记录),那么使用rawQuery
相关问题
- 1. Android - String和Sqlite数据库上的数据有什么区别?
- 2. “在原地”更新Android SQLite数据库不与rawQuery工作
- 3. rawQuery不工作在SQLite android
- 4. sqlite数据库中'anything'和“anything”的区别
- 5. SQLite rawquery
- 6. sqlite中query()和rawQuery()之间有什么区别,哪一个更有效,goog
- 7. Android SQLite的rawQuery()方法
- 8. Android应用程序开发中的Mysql和SQLite数据库有什么区别?
- 9. SQLite rawQuery selectionArgs和Integers字段
- 10. Android ExpandableListView和SQLite数据库
- 11. Android SQLite数据库和SharedPreferences
- 12. android和java中的SQLite数据库
- 13. Android中的Sqlite怪异rawQuery行为
- 14. 在ORDER BY的android sqlite rawQuery问题?
- 15. SQLite数据库中的Android
- 16. 应用程序没有响应,而SQLite数据库execSQL()
- 17. 在Android库中创建SQLite数据库
- 18. ORM在Android SQLite和数据库方案
- 19. Android SQLite捕获错误使用execSQL
- 20. SQLite中“文本”和“字符串”数据类型的区别
- 21. 在sqlite数据库中的错误Android
- 22. Android SQLite数据库
- 23. Android-SQLite数据库
- 24. Android。 SQLite数据库
- 25. sqlite数据库android
- 26. Android SQLite数据库
- 27. SQLite的rawQuery错误
- 28. Android的SQLite的rawQuery“WHERE”不工作
- 29. 的Android SQLite的rawQuery给予麻烦
- 30. 为什么我的sqlite数据库中的rawquery会给我错误的人?
明白了...... execSQL不返回任何东西,用于创建,更新等。而rawQuery返回游标等。 – 2012-03-12 14:09:17
非常感谢您的详细解释:)干杯! – 2017-08-11 08:14:31