fark

2012-03-12 23 views
36

Hamquery ve execSQL kullanımı arasındaki tam fark nedir? Android etkinliğinde bir sorgu yazarken, rawquery ne zaman kullanılır ve execSQL ne zaman kullanılır? API belgelerinefark

cevap

68

:


void execSQL (String sql)

bir SEÇ veya veri döndürür herhangi başka bir SQL deyimi DEĞİLDİR tek bir SQL ifadesini yürütün.

void execSQL (String sql, Object[] bindArgs)

bir SEÇ/INSERT/UPDATE DEĞİLDİR tek bir SQL ifadesini yürütün

/SİL. Belgeler tutarsızdır, ancak ikisi de aynı şekilde davranırlar.

İkincisinin belgeleri daha derindir.


Cursor rawQuery (String sql, String[] selectionArgs)

sağlanan SQL çalıştırır ve sonuç kümesi üzerinden bir İmleç döndürür.

  • Bir SELECT ifadesiyle veritabanını sorgulamak istiyorum:


rawQuery vardır için kullanır.
=>rawQuery("SELECT ..., Cursor'da bir dizi satır ve sütun döndürür.

  • Özel durumlar PRAGMA table_info gibi vb kapatmak için hiçbir şey, moveToNext olduğu
  • not (this question bakınız): Yapma 0 INSERT, UPDATE veya DELETE ya da veritabanını değiştiren başka herhangi bir şey için rawQuery kullanın. "Why does a delete rawQuery need a moveToFirst in order to actually delete the rows?"'a girersiniz. Bu sorgulama nedeni, SQLite gecikmesi execution of the statement için anlamına gelen (imlecin erişilmesi) gerekene kadar sonucun okunmasını erteleyebilir.
  • execSQL vardır için kullanır:

    • Sen veritabanı için "talimatlarını" var. CREATE TABLE (veya diğer herhangi bir CREATE bildirimi, ör.Onları dönen yerine özellikleri ayarlamak CREATE INDEX), DROP, PRAGMA s ...
    • INSERT, UPDATE veya DELETE değiştirilmiş satırı sayısına veya son ekin satır kimliği ilgilenmiyoruz. DatabaseUtils.longForQuerySELECT last_insert_rowid() veya SELECT changes() biriyle:
    • Bir ifadeyi yürütmeye dayanan başka bir şey.
    +0

    açıkladı .. execSQL bir şey döndürmez ve oluşturma, güncelleme vb. için kullanılır ve rawQuery imleçleri döndürür vb. –

    +0

    Ayrıntılı açıklama için çok teşekkürler :) Şerefe! –

    11

    sonra, sonra (örneğin oluşturmak/tabloları değiştirme) kendi çıkışını ilgili olmadan veritabanında şey yürütmek execSQL kullanmak, ancak sorguda karşı karşılığında bazı sonuçlar bekliyoruz (örn kayıtları seçin) isterseniz rawQuery kullanın