Android中使用的SQLite版本?


271

Android中使用的SQLite版本是什么?

原因:我想知道如何处理架构迁移。较新的SQLite版本支持“ ALTER TABLE” SQL命令,这将使我不必复制数据,删除表,重新创建表和重新插入数据。


1
您仍然可能想要复制-删除-重新创建-重新插入;SQLite的ALTER TABLE的功能不是很全。
J. Polfer

请选择正确的答案,3.4.0不正确
Noah

1
但是,这不取决于您所运行的Android版本吗?我可能确实在运行1.6的旧myTouch上安装了SQLite 3.4.x,或者在运行2.2的新G2上安装了更高版本。真正的答案是检查您的特定手机。
Eno

几周前发布了1.0.0版的android.arch.persistence:db和android.arch.persistence:db-framework。
Prags

Answers:


478

2016年10月更新:这是更新的官方文档的链接,其中包含此答案的要点:android.database.sqlite包级Javadoc

使用仿真器:

adb shell sqlite3 --version   

更新:自SDK 29(仿真器修订版8)以来,adb shell命令提供:

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

有什么想法吗?问题追踪器在这里

SQLite 3.28.0窗口函数!):

  • 30-11.0-R(SDK管理器中的修订版2)

SQLite 3.22.0

  • 29 -10.0-Q(SDK Manager中的修订版8)
  • 28 -9.0-P

SQLite 3.19.4(由于某些原因,sqlite发行说明中不存在3.19.4!因此,请链接到版本控制签入):

  • 27 -8.1.0-O MR1

SQLite 3.18.2

  • 26-8.0.0-O(注意:O beta版本使用3.18.0

SQLite 3.9.2

  • 25-7.1.1-N MR1
  • 24 -7.0-N(注意:预览版使用相同版本)

SQLite 3.8.10.2

  • 23-6.0-M(注意:M预览1(SDK级别22)使用3.8.10

SQLite 3.8.6.1(SQLite链接用于3.8.6,因为由于某些原因不存在3.8.6.1):

  • 22-5.1.1-棒棒糖

SQLite 3.8.6

  • 21-5.0-棒棒糖

SQLite(未知):

  • 20-4.4W.2-Android Wear(没有可用的模拟器,但可能是3.7.11或3.8.4.3)

SQLite 3.7.11

  • 19-4.4-奇巧
  • 18-4.3-果冻豆
  • 17-4.2-果冻豆
  • 16 -4.1-Jelly Bean(链接断开,请参见此处

SQLite 3.7.4

  • 15-4.0.3-冰淇淋三明治
  • 14 -4.0-冰淇淋三明治(断开的链接,请参阅此处
  • 13-3.2-蜂窝
  • 12-3.1-蜂窝
  • 11 -3.0-Honeycomb(链接断开,请参见此处

SQLite 3.6.22

  • 10-2.3.3-姜饼
  • 9-2.3.1-姜饼
  • 8 -2.2-Froyo(链接断开,请参见此处

SQLite 3.5.9

  • 7-2.1-小饼
  • 4-1.6甜甜圈
  • 3 -1.5-Cupcake(链接断开,请参见此处

注意:Android SDK级别的链接显示了android.database.sqlite软件包已更改的位置。如果没有链接(例如,SDK级别17),则表示对该程序包无更改。

注意:以下是一些异常现象(绝不详尽):

SQLite 3.7.13(而不是3.7.11):

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

SQLite 3.7.6.3(而不是3.6.22):

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

SQLite 3.7.5(而不是3.7.4):

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

SQLite 3.7.0.1(而不是3.6.22):

  • LG Esteem MS910(10-2.3.3-姜饼,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(而不是3.5.9):

  • 摩托罗拉Backflip MB300(7-2.1-Eclair,ERD79)
  • Garmin-AsusnüvifoneA10 / A50 / Garminfone(7-2.1-Eclair,ERE27)

注意:要获取SQLite版本的adb命令仅在模拟器和具有sqlite3可用的设备上有效:https : //stackoverflow.com/a/3645800/444761

对于其他设备,请参阅Juri的答案

我已将问题#58909添加到Android问题跟踪器。如果您想支持它,请加注星标。

注意:如果您希望您的应用在所有Android版本中使用相同版本的SQLite,请考虑使用此第三方SQLite支持库


/ system / bin / sh:sqlite3:找不到这是在根植的Android 4.0.2设备上
指针为空

谢谢马克。我有点困惑。在开发过程中,如何确保我的sqlite版本在所有设备上保持一致?我的意思是做targetSdkVersionbuildTarget有任何影响?
穆罕默德·巴巴尔

1
@MuhammadBabar您需要使用Juri的答案来获取安装在用户设备上的SQLite的实际版本。targetSdkVerson和buildTarget没有区别。
2014年

59

尽管文档给出了3.4.0作为参考编号,但是如果执行以下sql,您会注意到安装的SQlite数量要多得多:

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

这只是一段快速,肮脏的代码,用于检索sqlite版本。例如,在具有Android 2.1的HTC Hero上,我得到:3.5.9

在装有Android 2.2的Nexus One上,我什至得到3.6.22


2
我想3.4.0是最低版本#-出于可移植性,除非您有充分的理由这么做,否则您可能不应该假定其为更高版本。
Eno 2010年

2
当然,你是对的。但是,如果必须使用某些高级功能可能会提高较高SQLite版本的性能,则可以使用代码进行查询,并最终根据已部署的版本切换查询的类型:)
Juri

带有自定义2.2 ROM的我的Droid也报告3.6.22
Austyn Mahoney 2010年

我的Epic带有2.2的预发布版本说3.6.23-这个数字似乎在上升。
dhaag23 2011年

1
配备Android 4.2的Nexus 7,提供3.7.11
christophercotton

26
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9

与ADP1 1.6和2.1仿真器相同。


它给我:sqlite3的:许可被拒绝
亚尔

对我来说很好。我打开了cmd提示符,然后导航到adb.exe所在的android文件夹。然后,我输入了两个命令
Pavenhimself

8
在Nexus 4 KitKat上显示“ / system / bin / sh:sqlite3:未找到”。
本克莱顿

6

Andorid API和受支持的SQLite版本的简短概述。

在此处输入图片说明

概述来自Mark Carters答案中的链接。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.