Bagaimana cara menggunakan pernyataan yang disiapkan di SQlite di Android?
android
sqlite
prepared-statement
pupeno
sumber
sumber
Jawaban:
Saya menggunakan pernyataan yang sudah disiapkan di Android sepanjang waktu, ini cukup sederhana:
sumber
SQLiteStatement.bindXXX()
memiliki indeks berbasis 1, bukan berbasis 0 seperti yang lainnya.Untuk pernyataan SQLite yang disiapkan di Android ada SQLiteStatement . Pernyataan yang telah disiapkan membantu Anda mempercepat kinerja (terutama untuk pernyataan yang perlu dijalankan beberapa kali) dan juga membantu menghindari serangan injeksi. Lihat artikel ini untuk pembahasan umum tentang pernyataan yang disiapkan.
SQLiteStatement
dimaksudkan untuk digunakan dengan pernyataan SQL yang tidak mengembalikan banyak nilai. (Itu berarti Anda tidak akan menggunakannya untuk sebagian besar kueri.) Berikut adalah beberapa contohnya:Buat tabel
The
execute()
metode tidak mengembalikan nilai sehingga sangat tepat untuk digunakan dengan MENCIPTAKAN dan DROP tetapi tidak dimaksudkan untuk digunakan dengan SELECT, INSERT, DELETE, dan UPDATE karena kembali nilai-nilai tersebut. (Tapi lihat pertanyaan ini .)Sisipkan nilai
Perhatikan bahwa
executeInsert()
metode yang digunakan daripadaexecute()
. Tentu saja, Anda tidak ingin selalu memasukkan hal yang sama di setiap baris. Untuk itu Anda bisa menggunakan binding .Biasanya Anda menggunakan pernyataan yang sudah disiapkan ketika Anda ingin dengan cepat mengulangi sesuatu (seperti INSERT) berkali-kali. Pernyataan yang disiapkan membuatnya sehingga pernyataan SQL tidak harus diurai dan dikompilasi setiap saat. Anda bahkan dapat mempercepat lebih banyak dengan menggunakan transaksi . Ini memungkinkan semua perubahan diterapkan sekaligus. Berikut ini contohnya:
Lihat tautan ini untuk beberapa info bagus lainnya tentang transaksi dan mempercepat penyisipan database.
Perbarui baris
Ini adalah contoh dasar. Anda juga dapat menerapkan konsep dari bagian di atas.
Hapus baris
The
executeUpdateDelete()
Metode ini juga dapat digunakan untuk laporan DELETE dan diperkenalkan pada API 11. Lihat ini Q & A .Berikut ini contohnya.
Pertanyaan
Biasanya saat Anda menjalankan kueri, Anda ingin mendapatkan kursor kembali dengan banyak baris. Itu bukan untuk apa
SQLiteStatement
. Anda tidak menjalankan kueri dengannya kecuali Anda hanya memerlukan hasil yang sederhana, seperti jumlah baris dalam database, yang dapat Anda lakukan dengansimpleQueryForLong()
Biasanya Anda akan menjalankan
query()
metode SQLiteDatabase untuk mendapatkan kursor.Lihat jawaban ini untuk detail yang lebih baik tentang kueri.
sumber
clearBindings()
tidak hanya mengaturnya kenull
(lihat kode sumber ). Saya melihatnya sebagai membersihkan status sehingga tidak ada yang mempengaruhinya dari loop sebelumnya. Mungkin itu tidak perlu. Saya akan senang untuk seseorang yang tahu untuk berkomentar.Jika Anda ingin kursor kembali, Anda dapat mempertimbangkan sesuatu seperti ini:
Lihat cuplikan Genskrip ini jika Anda ingin yang lebih lengkap. Perhatikan bahwa ini adalah kueri SQL berparameter, jadi pada dasarnya, ini adalah pernyataan yang disiapkan.
sumber
Contoh jasonhudgins tidak akan bekerja. Anda tidak dapat menjalankan kueri dengan
stmt.execute()
dan mendapatkan nilai (atau aCursor
) kembali.Anda hanya dapat mengkompilasi pernyataan yang tidak mengembalikan baris sama sekali (seperti menyisipkan, atau membuat pernyataan tabel) atau satu baris dan kolom, (dan menggunakan
simpleQueryForLong()
atausimpleQueryForString()
).sumber
Untuk mendapatkan kursor, Anda tidak bisa menggunakan compiledStatement. Namun, jika Anda ingin menggunakan pernyataan SQL yang disiapkan penuh, saya merekomendasikan adaptasi metode jbaez ... Menggunakan
db.rawQuery()
alih-alihdb.query()
.sumber