Versi SQLite yang digunakan di Android?

271

Apa versi SQLite yang digunakan di Android?

Alasan: Saya ingin tahu bagaimana menangani migrasi skema. Versi SQLite yang lebih baru mendukung perintah SQL "ALTER TABLE" yang akan menyelamatkan saya harus menyalin data, menjatuhkan tabel, membuat ulang tabel dan memasukkan kembali data.

Eno
sumber
1
Anda mungkin masih ingin menyalin-jatuhkan-buat-masukkan kembali; ALTER TABLE SQLite tidak terlalu berfitur lengkap.
J. Polfer
Silakan pilih jawaban yang benar, 3.4.0 tidak benar
Nuh
1
Bukankah itu tergantung pada versi Android yang Anda jalankan? Saya mungkin memang memiliki SQLite 3.4.x di myTouch lama saya yang menjalankan 1.6 ATAU Saya mungkin memiliki versi yang lebih tinggi pada G2 baru saya yang menjalankan 2.2. Jawaban sebenarnya adalah memeriksa handset khusus Anda.
Eno
1.0.0 dari android.arch.persistence: db dan android.arch.persistence: db-framework dikirimkan beberapa minggu lalu.
Prags

Jawaban:

478

UPDATE OCT 2016 : Berikut adalah tautan ke dokumen resmi yang diperbarui yang mencakup poin utama dalam jawaban ini: javadoc tingkat paket android.database.sqlite

Menggunakan emulator:

adb shell sqlite3 --version   

UPDATE: Sejak SDK 29 (revisi emulator 8), perintah adb shell memberikan:

/system/bin/sh: sqlite3: inaccessible or not found

Ada ide kenapa? Pelacak masalah sini .

SQLite 3.28.0 ( fungsi jendela !):

  • 30-11.0-R (Revisi 2 dalam SDK Manager)

SQLite 3.22.0 :

  • 29 -10.0-Q (Revisi 8 dalam Manajer SDK)
  • 28 -9.0-P

SQLite 3.19.4 (untuk beberapa alasan 3.19.4 tidak ada dalam catatan rilis sqlite! Jadi tautkan ke check-in kontrol versi sebagai gantinya):

  • 27 -8.1.0-O MR1

SQLite 3.18.2 :

  • 26-8.0.0-O (catatan: O versi beta digunakan 3.18.0 )

SQLite 3.9.2 :

  • 25-7.1.1-N MR1
  • 24 -7.0-N (catatan: pratinjau menggunakan versi yang sama)

SQLite 3.8.10.2 :

  • 23-6.0-M (catatan: M Pratinjau 1 (SDK level 22) digunakan 3.8.10 )

SQLite 3.8.6.1 (Tautan SQLite untuk 3.8.6 karena 3.8.6.1 tidak ada karena beberapa alasan):

  • 22-5.1.1-Lollipop

SQLite 3.8.6 :

  • 21-5.0-Lollipop

SQLite (tidak diketahui):

  • 20-4.4W.2-Android Wear (tidak tersedia emulator, tetapi mungkin 3.7.11 atau 3.8.4.3)

SQLite 3.7.11 :

  • 19-4.4-KitKat
  • 18-4.3-Jelly Bean
  • 17-4.2-Jelly Bean
  • 16 -4.1-Jelly Bean (tautan rusak, lihat di sini )

SQLite 3.7.4 :

  • 15-4.0.3-Sandwich Es Krim
  • 14 -4.0-Ice Cream Sandwich (tautan rusak, lihat di sini )
  • 13-3.2-Honeycomb
  • 12-3.1-Honeycomb
  • 11 -3.0-Honeycomb (tautan rusak, lihat di sini )

SQLite 3.6.22 :

  • 10-2.3.3-Gingerbread
  • 9-2.3.1-Gingerbread
  • 8 -2.2-Froyo (tautan rusak, lihat di sini )

SQLite 3.5.9 :

  • 7-2.1-Eclair
  • 4-1.6-Donat
  • 3 -1.5-Cupcake (tautan rusak, lihat di sini )

Catatan: Tautan level Android SDK menunjukkan tempat android.database.sqlite paket telah berubah. Jika tidak ada tautan (mis. SDK level 17), menunjukkan tidak ada perubahan pada paket itu.

Catatan: Berikut adalah beberapa anomali (daftar sama sekali tidak lengkap):

SQLite 3.7.13 (bukan 3.7.11):

  • LG Optimus L70 MS323 LGMS323 | KOT49I.MS32310b (19-4.4-KitKat)
  • LG Optimus G E975 LG-E975 | JZO54K (16-4.1-Jelly Bean)
  • LG G2 D802 LG-D802 | JDQ39B (17-4.2-Jelly Bean)

SQLite 3.7.6.3 (bukan 3.6.22):

  • LG Optimus Sol E730 / myTouch E739 / myTouch Q C800 (10-2.3.3-Gingerbread, GRJ22)
  • LG Optimus Vu F100S / F100L (10-2.3.3-Gingerbread, RK39F)
  • LG Optimus LTE TAG F120K / F120L (10-2.3.3-Gingerbread, GRK39F)
  • LG Optimus LTE L-01D (10-2.3.3-Gingerbread, GRJ90)
  • LG Optimus Net P690b (10-2.3.3-Gingerbread, GINGERBREAD)
  • LG Prada KU5400 (10-2.3.3-Gingerbread, GWK74)
  • LG Prada P940 (10-2.3.3-Gingerbread, GWK74)
  • LG LU6200 / SU640 (10-2.3.3-Gingerbread, GRJ90) s

SQLite 3.7.5 (bukan 3.7.4):

  • Samsung Galaxy Note (15-GT-N7000 | IML74K.ZSLPF)
  • Samsung Galaxy SII (15-SC-02C | IML74K.OMMP4 dan GT-I9100 | IML74K.DXLP7)
  • Samsung Galaxy S Duos (15-GT-S7562 | IMM76I.S7562XXBMD6)
  • Samsung Galaxy Tab 7.7 (15-GT-P6810 | IMM76D.ZSLP8)

SQLite 3.7.0.1 (bukan 3.6.22):

  • LG Esteem MS910 (10-2.3.3-Gingerbread, GSE-_v.05)
  • AndroTab (8-2.2-Froyo, 1.0.7100.0385)
  • GPLUS MUSN M500 (8-2.2-Froyo, FRG83G)

SQLite 3.6.23.1 (bukan 3.5.9):

  • Motorola Backflip MB300 (7-2.1-Eclair, ERD79)
  • Garmin-Asus nüvifone A10 / A50 / Garminfone (7-2.1-Eclair, ERE27)

Catatan: perintah adb untuk mendapatkan versi SQLite hanya berfungsi pada emulator dan pada perangkat dengan sqlite3 tersedia: https://stackoverflow.com/a/3645800/444761

Untuk perangkat lain, lihat jawaban Juri .

Saya telah menambahkan Edisi # 58909 ke Android Issue Tracker. Tolong beri bintang pada ini jika Anda ingin mendukungnya.

Catatan: jika Anda ingin aplikasi Anda menggunakan versi SQLite yang sama di semua versi Android, pertimbangkan untuk menggunakan pustaka dukungan SQLite pihak ke-3 ini .

Tandai
sumber
/ system / bin / sh: sqlite3: tidak ditemukan Ini ada di perangkat Android 4.0.2 yang telah di-root
Pointer Null
Tanda terima kasih. Saya sedikit bingung. Sementara pengembangan, bagaimana saya bisa memastikan versi sqlite saya tetap konsisten di semua perangkat? maksud saya apakah targetSdkVersionatau buildTargetmemiliki pengaruh pada itu?
Muhammad Babar
1
@MuhammadBabar Anda harus menggunakan jawaban Juri untuk mendapatkan versi aktual SQLite yang diinstal pada perangkat pengguna. targetSdkVerson dan buildTarget tidak ada bedanya.
Markus
59

Meskipun dokumentasi memberikan 3.4.0 sebagai nomor referensi, jika Anda menjalankan sql berikut, Anda akan melihat bahwa ada jumlah SQlite yang jauh lebih tinggi yang diinstal:

Cursor cursor = SQLiteDatabase.openOrCreateDatabase(":memory:", null).rawQuery("select sqlite_version() AS sqlite_version", null);
String sqliteVersion = "";
while(cursor.moveToNext()){
   sqliteVersion += cursor.getString(0);
}

Ini hanya sepotong kode cepat dan kotor untuk mengambil versi sqlite. Misalnya pada HTC Hero dengan Android 2.1, saya mendapatkan: 3.5.9 .

Di Nexus One saya dengan Android 2.2, saya bahkan mendapatkan 3.6.22 .

Juri
sumber
2
Saya membayangkan 3.4.0 diberikan sebagai versi minimum # - untuk portabilitas Anda mungkin tidak boleh menganggap itu versi yang lebih tinggi kecuali Anda memiliki alasan yang sangat bagus untuk melakukannya.
Eno
2
tentu kamu benar Tetapi jika Anda harus menggunakan beberapa fitur canggih yang dapat meningkatkan kinerja pada versi SQLite yang lebih tinggi, Anda dapat menggunakan kode untuk meminta dan akhirnya beralih jenis permintaan tergantung pada versi yang digunakan :)
Juri
Droid saya dengan custom 2.2 ROM juga melaporkan 3.6.22
Austyn Mahoney
My Epic dengan pra-rilis 2.2 mengatakan 3.6.23 - jumlahnya tampaknya beringsut ke atas.
dhaag23
1
Nexus 7 dengan Android 4.2, memberikan 3.7.11
christophercotton
26
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9

Sama pada emulator ADP1 1.6 & 2.1.

yanchenko
sumber
Ini memberi saya: sqlite3: izin ditolak
Yar
Bekerja dengan baik untuk saya. Saya membuka cmd prompt dan menavigasi ke folder android, di mana adb.exe berada. Lalu saya mengetikkan dua perintah
Pavenhimself
8
memberikan "/ system / bin / sh: sqlite3: not found" pada Nexus 4 KitKat.
Ben Clayton
6

Tinjauan singkat tentang API Andorid dan versi SQLite yang didukung.

masukkan deskripsi gambar di sini

Gambaran umum dari tautan dalam jawaban Mark Carters.

Petterson
sumber
0

Di Kamar Anda dapat meminta

SELECT sqlite_version ()

RG

Roar Grønmo
sumber