Sự khác biệt chính xác giữa việc sử dụng rawquery và execSQL là gì ?? Khi viết truy vấn trong hoạt động trên Android, khi nào cần sử dụng rawquery và khi nào nên dùng execSQL?sự khác biệt giữa rawquery và execSQL trong cơ sở dữ liệu sqlite android
Trả lời
Từ tài liệu API:
Thực hiện một câu lệnh SQL đơn mà KHÔNG phải là một SELECT hoặc bất kỳ câu lệnh SQL khác mà trả về dữ liệu.
void execSQL (String sql, Object[] bindArgs)
Thực hiện một câu lệnh SQL đơn đó không phải là một SELECT/INSERT/UPDATE/DELETE.
Tài liệu không nhất quán nhưng chúng hoạt động giống nhau. Tài liệu sau này sâu hơn.
Cursor rawQuery (String sql, String[] selectionArgs)
Chạy SQL cung cấp và trả về một con trỏ qua tập kết quả.
Sử dụng cho rawQuery
là:
- Bạn muốn truy vấn cơ sở dữ liệu với một tuyên bố
SELECT
.
=>rawQuery("SELECT ...
trả về một tập hợp các hàng và cột trong mộtCursor
.- Đó là hiệu quả hơn để sử dụng
DatabaseUtils.longForQuery(SQLiteDatabase, String, String[])
hoặcDatabaseUtils.stringForQuery(...)
trong trường hợp chỉ có một kết quả truy vấn 1x1, giống như từSELECT count(*) FROM table
(mà cũng có đó là phương pháp chuyên dụng riêng:DatabaseUtils.queryNumEntries(...)
) - điều này sẽ bỏ qua việc tạo ra một đối tượngCursor
& đơn giản hoá đang kể từ khi có cũng không có gì để đóng, moveToNext vv
- Đó là hiệu quả hơn để sử dụng
- trường hợp đặc biệt như
PRAGMA table_info
trả về dữ liệu trong hàng (xem this question) - Lưu ý: Bạn không sử dụng
rawQuery
choINSERT
,UPDATE
hoặcDELETE
hoặc bất kỳ thứ gì khác để sửa đổi cơ sở dữ liệu. Bạn sẽ chạy vào "Why does a delete rawQuery need a moveToFirst in order to actually delete the rows?". Lý do là các truy vấn có thể trì hoãn việc đọc kết quả cho đến khi cần thiết (= truy cập vào con trỏ) có nghĩa là để trì hoãn SQLite execution of the statement.
Sử dụng cho execSQL
là:
- Bạn có "hướng dẫn" cho các cơ sở dữ liệu. Giống như
CREATE TABLE
(hoặc bất kỳ tuyên bố khácCREATE
, ví dụ:CREATE INDEX
),DROP
,PRAGMA
s đó đặt thuộc tính thay vì trở về họ, ... INSERT
,UPDATE
hoặcDELETE
khi bạn không quan tâm đến số lượng hàng sửa đổi hoặc id dãy chèn ngoái.- Khi bạn cần những, hoặc sử dụng
update()
,insert()
,delete()
phương pháp hoặc sử dụng một tuyên bố thứ hai để đọc những:DatabaseUtils.longForQuery
với một trong haiSELECT last_insert_rowid()
hoặcSELECT changes()
. Cả hai chỉ trả lại 1 giá trị số nguyên. (xem "Get updated rows count from SQLite in Android using a raw query?" và “SELECT last_insert_rowid()” returns always “0”)
- Khi bạn cần những, hoặc sử dụng
- Bất cứ điều gì khác dựa vào việc thực hiện một tuyên bố.
nếu bạn muốn thực hiện một cái gì đó trong cơ sở dữ liệu mà không liên quan đến sản lượng của nó (ví dụ như tạo/thay đổi bảng), sau đó sử dụng execSQL, nhưng nếu bạn đang mong đợi một số kết quả ngược lại đối với truy vấn của bạn (ví dụ như chọn hồ sơ) sau đó sử dụng rawQuery
- 1. Sự khác biệt giữa cơ sở dữ liệu MySQL/SQLite/etc?
- 2. Sự khác biệt giữa coredata và sqlite
- 3. Sự khác biệt giữa tập dữ liệu và cơ sở dữ liệu là gì?
- 4. Sự khác biệt chính xác giữa "Nhà cung cấp nội dung" và "Cơ sở dữ liệu SQLite"
- 5. Sự khác biệt giữa phiên trong tệp và trong cơ sở dữ liệu
- 6. Sự khác biệt giữa kiểu dữ liệu "Văn bản" và "Chuỗi" trong SQLite
- 7. Cơ sở dữ liệu Flushing và SQLite trên android
- 8. Android ExpandableListView và cơ sở dữ liệu SQLite
- 9. Sự khác biệt giữa Cơ sở dữ liệu Quan hệ và Không Quan hệ là gì?
- 10. Sự khác nhau giữa cơ sở dữ liệu và kho dữ liệu là gì?
- 11. Chèn mảng trong cơ sở dữ liệu SQLite trong android
- 12. onUpgrade() cơ sở dữ liệu sqlite trong Android
- 13. Sự khác biệt giữa điều này và cơ sở
- 14. Cơ sở dữ liệu SQLite của Android: chèn chậm
- 15. Tạo bảng trong cơ sở dữ liệu sqlite trên android
- 16. Sự khác biệt giữa "db_owner" và "người dùng sở hữu cơ sở dữ liệu" trong SQL Server 2000 là gì?
- 17. Android duyệt cơ sở dữ liệu SQLite trên điện thoại
- 18. cơ sở dữ liệu Android SQLite bị hỏng
- 19. Android: SQLite sử dụng cơ sở dữ liệu sai
- 20. SQLite rawQuery selectionArgs và số nguyên Fields
- 21. Android đổi tên Cơ sở dữ liệu SQLite
- 22. Thông số rawquery Android SQLite
- 23. Android - Đâu là cơ sở dữ liệu SQLite lưu trữ
- 24. Lược đồ cơ sở dữ liệu Sqlite của Android
- 25. Sự khác biệt giữa sở thích được chia sẻ và sqlite
- 26. đồng bộ hóa cơ sở dữ liệu sqlite android
- 27. Sự khác biệt giữa cơ sở dữ liệu dựa trên tệp và cơ sở dữ liệu dựa trên máy chủ là gì?
- 28. Sự khác biệt giữa cơ sở dữ liệu dựa trên biểu đồ và cơ sở dữ liệu hướng đối tượng là gì?
- 29. SQLite: cơ sở dữ liệu chỉ đọc
- 30. Sự khác biệt giữa Danh mục ban đầu và từ khóa Cơ sở dữ liệu trong chuỗi kết nối
đã rõ ràng .. execSQL không trả lại bất kỳ thứ gì và được sử dụng để tạo, cập nhật v.v. và rawQuery trả về con trỏ, v.v. –
Cảm ơn rất nhiều vì lời giải thích chi tiết :) Chúc mừng !!! –