Saya menggunakan metode kueri SQLiteDatabase. Bagaimana cara menggunakan metode kueri?
Saya mencoba ini:
Cursor cursor = sqLiteDatabase.query(
tableName, tableColumns, whereClause, whereArgs, groupBy, having, orderBy);
tableColumns - parameter kolom dibuat sebagai berikut.
String[] columns = new String[]{KEY_ID, KEY_CONTENT};
Jika kita perlu mendapatkan semua field, bagaimana seharusnya parameter kolom dibangun. Apakah kita perlu menyertakan semua Nama Bidang dalam larik String?
Bagaimana cara menggunakan metode kueri dengan benar?
Jawaban:
tableColumns
null
untuk semua kolom seperti padaSELECT * FROM ...
new String[] { "column1", "column2", ... }
untuk kolom tertentu seperti diSELECT column1, column2 FROM ...
- Anda juga dapat meletakkan ekspresi kompleks di sini:new String[] { "(SELECT max(column1) FROM table1) AS max" }
akan memberi Anda kolom bernamamax
memegang nilai makscolumn1
whereClause
WHERE
tanpa kata kunci itu, mis"column1 > 5"
?
untuk hal-hal yang bersifat dinamis, mis"column1=?"
-> lihatwhereArgs
whereArgs
?
dalamwhereClause
urutan kemunculannyayang lain
whereClause
pernyataan setelah kata kunci ataunull
jika Anda tidak menggunakannya.Contoh
setara dengan kueri mentah berikut
Dengan menggunakan versi Where / Bind -Args Anda mendapatkan nilai-nilai yang di-escape secara otomatis dan Anda tidak perlu khawatir jika data input berisi
'
.Tidak
String whereClause = "column1='" + value + "'";
Aman: Aman:
String whereClause = "column1=?";
karena jika nilai berisi
'
pernyataan Anda akan rusak dan Anda mendapatkan pengecualian atau melakukan hal-hal yang tidak diinginkan, misalnyavalue = "XYZ'; DROP TABLE table1;--"
bahkan mungkin menjatuhkan tabel Anda karena pernyataan tersebut akan menjadi dua pernyataan dan komentar:menggunakan versi args
XYZ'; DROP TABLE table1;--
akan di-escape ke'XYZ''; DROP TABLE table1;--'
dan hanya akan diperlakukan sebagai nilai. Sekalipun'
tidak dimaksudkan untuk melakukan hal-hal buruk, masih cukup umum bahwa orang-orang memilikinya dalam nama mereka atau menggunakannya dalam teks, nama file, sandi, dll. Jadi selalu gunakan versi args. (Tidak apa-apa untuk membangunint
dan primitif lainnya secara langsungwhereClause
)sumber
limit
parameter, misal developer.android.com/reference/android/database/sqlite/… pada akhirnya semua hanya penggabungan teks sederhana sehingga Anda dapat memasukkan misalnya"some_column LIMIT 10"
ke dalamorderBy
dan itu akan tetap berfungsitable1 CROSS JOIN table2
sebagai tablename. Tetapi ada titik di mana saya akan melihat rawquery: stackoverflow.com/q/10598137/995891query
metode hanya menambahkan beberapa kata kunci sepertiSELECT
danFROM
dengan argumen (lihat sumber) kemudian melakukanrawQuery
dengan query string yang dihasilkan. Jika kueri Anda tidak cocok dengan argumen yang tersediaquery
, cukup tulis sendiri string kueri tersebut.Ini adalah jawaban yang lebih umum yang dimaksudkan untuk menjadi referensi cepat bagi pemirsa di masa mendatang.
Contoh
Penjelasan dari dokumentasi
sumber
Di mana klausa dan args bekerja sama untuk membentuk pernyataan WHERE dari kueri SQL. Jadi katakanlah Anda ingin mengekspresikan
Maka whereClause dan whereArgs Anda akan menjadi sebagai berikut
Jika Anda ingin memilih semua kolom tabel, saya yakin string null yang diteruskan ke tableColumns sudah cukup.
sumber
?
di'
, yang'
ditambahkan secara otomatis jika diperlukanjika kueri SQL Anda seperti ini
Kemudian untuk metode query (), kita dapat melakukan seperti: -
sumber
TABLE_ROW_ID + "=" + rowID
,=
iniwhere
klausulnya. Untuk memilih semua nilai, Anda harus memberikan semua nama kolom:dan berikut adalah tutorial yang bagus untuk database.
sumber