Versão do SQLite usada no Android?

271

Qual é a versão do SQLite usada no Android?

Razão: estou pensando em como lidar com migrações de esquema. As versões mais recentes do SQLite suportam um comando SQL "ALTER TABLE", o que me pouparia de copiar dados, descartar a tabela, recriar tabela e reinserir dados.

Eno
fonte
1
Você ainda pode copiar, soltar, recriar e reinserir; O ALTER TABLE do SQLite não é muito completo.
J.Julfer
Por favor, escolha a resposta correta, 3.4.0 não está certo
Noah
1
Isso não depende da versão do Android que você está executando? Talvez eu tenha o SQLite 3.4.x no meu antigo myTouch executando a versão 1.6 OU talvez eu tenha uma versão superior no meu novo G2 executando a 2.2. A verdadeira resposta é verificar o seu aparelho específico.
Eno
1.0.0 de android.arch.persistence: db e android.arch.persistence: db-framework enviado há algumas semanas.
Prags

Respostas:

478

ATUALIZAÇÃO OUT OUT 2016 : Aqui está um link para os documentos oficiais atualizados que incluem os pontos principais nesta resposta: javadoc no nível do pacote android.database.sqlite

Usando os emuladores:

adb shell sqlite3 --version   

ATUALIZAÇÃO: Desde o SDK 29 (revisão 8 do emulador), o comando adb shell fornece:

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

Alguma idéia do porquê? Rastreador de problemas aqui .

SQLite 3.28.0 ( funções da janela !):

  • 30-11.0-R (Revisão 2 no SDK Manager)

SQLite 3.22.0 :

  • 29 -10.0-Q (Revisão 8 no SDK Manager)
  • 28 -9,0-P

SQLite 3.19.4 (por algum motivo, o 3.19.4 não existe nas notas de versão do sqlite! Portanto, vinculando aos check-ins de controle de versão):

  • 27 -8.1.0-O MR1

SQLite 3.18.2 :

  • 26-8.0.0-O (nota: as versões O beta usadas no 3.18.0 )

SQLite 3.9.2 :

  • 25-7.1.1-N MR1
  • 24 -7.0-N (nota: as pré-visualizações usaram a mesma versão)

SQLite 3.8.10.2 :

  • 23-6.0-M (observação: M Preview 1 (SDK nível 22) usado 3.8.10 )

SQLite 3.8.6.1 (o link SQLite é para 3.8.6 porque 3.8.6.1 não existe por algum motivo):

  • 22-5.1.1-Lollipop

SQLite 3.8.6 :

  • 21-5.0-Lollipop

SQLite (desconhecido):

  • 20-4.4W.2-Android Wear (nenhum emulador disponível, mas provavelmente o 3.7.11 ou 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 (link quebrado, veja aqui )

SQLite 3.7.4 :

  • Sanduíche de sorvete 15-4.0.3
  • 14 -4,0-Sanduíche de sorvete (link quebrado, veja aqui )
  • 13-3.2-Favo de mel
  • 12-3.1-favo de mel
  • 11 -3.0-Honeycomb (link quebrado, veja aqui )

SQLite 3.6.22 :

  • 10-2.3.3-Gingerbread
  • 9-2.3.1-Gingerbread
  • 8 -2.2-Froyo (link quebrado, veja aqui )

SQLite 3.5.9 :

  • 7-2.1-Eclair
  • 4-1.6-Donut
  • 3 -1.5-Cupcake (link quebrado, veja aqui )

Nota: Os links no nível do SDK do Android mostram onde o pacote android.database.sqlite foi alterado. Onde não há link (por exemplo, SDK nível 17), indica que não há alterações nesse pacote.

Nota: Aqui estão algumas anomalias (lista de nenhuma maneira exaustiva):

SQLite 3.7.13 (em vez de 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 (em vez de 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 (em vez de 3.7.4):

  • Samsung Galaxy Note (15-GT-N7000 | IML74K.ZSLPF)
  • Samsung Galaxy SII (15-SC-02C | IML74K.OMMP4 e 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 (em vez de 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 (em vez de 3.5.9):

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

Nota: o comando adb para obter a versão SQLite funciona apenas em emuladores e em dispositivos com sqlite3 disponíveis: https://stackoverflow.com/a/3645800/444761

Para outros dispositivos, consulte a resposta de Juri .

Adicionei um problema nº 58909 ao rastreador de problemas do Android. Marque isto com estrela se você quiser apoiá-lo.

Nota: se você deseja que seu aplicativo use a mesma versão do SQLite em todas as versões do Android, considere usar esta biblioteca de suporte ao SQLite de terceiros .

Mark
fonte
/ system / bin / sh: sqlite3: não encontrado Este é um dispositivo Android 4.0.2 com root
Pointer Null
Obrigado marca. Estou um pouco confuso. Durante o desenvolvimento, como posso garantir que minha versão do sqlite permaneça consistente em todos os dispositivos? Quero dizer, tem targetSdkVersionou buildTargettem alguma influência sobre isso?
Muhammad Babar
1
@MuhammadBabar Você precisa usar a resposta de Juri para obter a versão real do SQLite instalada no dispositivo do usuário. targetSdkVerson e buildTarget não fazem diferença.
Mark
59

Embora a documentação dê 3.4.0 como número de referência, se você executar o seguinte sql, notará que há um número muito maior de SQlite instalado:

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

Este é apenas um pedaço de código rápido e sujo para recuperar a versão sqlite. Por exemplo, em um HTC Hero com Android 2.1, recebo: 3.5.9 .

No meu Nexus One com Android 2.2, recebo até 3.6.22 .

Juri
fonte
2
Eu imagino que a 3.4.0 seja fornecida como uma versão mínima # - para portabilidade, você provavelmente não deve assumir que é uma versão superior, a menos que tenha um bom motivo para isso.
Eno
2
claro, você está certo. Mas se você tem que usar alguns recursos avançados que podem melhorar o desempenho em versões SQLite mais elevados, você pode usar o código para consulta e, eventualmente, mudar o tipo de consulta, dependendo da versão implantado :)
Juri
Meu Droid com uma ROM 2.2 personalizada também informa 3.6.22
Austyn Mahoney
Meu Epic com pré-lançamento 2.2 diz 3.6.23 - os números parecem estar avançando para cima.
precisa saber é o seguinte
1
Nexus 7 com Android 4.2, fornece 3.7.11
christophercotton
26
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9

O mesmo no emulador ADP1 1.6 e 2.1.

yanchenko
fonte
Dá-me: sqlite3: permissão negada
Yar
Funcionou bem para mim. Abri o prompt do cmd e naveguei para a pasta android, onde estava localizado o adb.exe. Então digitei os dois comandos
Pavenhimself
8
fornece "/ system / bin / sh: sqlite3: não encontrado" no KitKat do Nexus 4.
Ben Clayton
6

Uma breve visão geral das APIs do Andorid e das versões suportadas do SQLite.

insira a descrição da imagem aqui

A visão geral é do link na resposta de Mark Carters.

Petterson
fonte
0

Na sala, você pode consultar

SELECT sqlite_version ()

RG

Roar Grønmo
fonte