2012-03-12 26 views

Trả lời

68

Từ tài liệu API:


void execSQL (String sql)

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ột Cursor.
  • 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 cho INSERT, UPDATE hoặc DELETE 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ác CREATE, ví dụ:CREATE INDEX), DROP, PRAGMA s đó đặt thuộc tính thay vì trở về họ, ...
  • INSERT, UPDATE hoặc DELETE 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.
  • Bất cứ điều gì khác dựa vào việc thực hiện một tuyên bố.
+0

đã 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. –

+0

Cảm ơn rất nhiều vì lời giải thích chi tiết :) Chúc mừng !!! –

11

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

Các vấn đề liên quan