Android 使用的 SQLite 版本是多少?

302

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

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


1
你可能仍然想要复制-删除-重新创建-重新插入; SQLite的ALTER TABLE功能不是很全面。 - J. Polfer
请选择正确的答案,3.4.0 不正确。 - Noah
1
这并不取决于你运行的Android版本吗?我可能确实在我的旧myTouch上运行着SQLite 3.4.x,而该手机运行着1.6版本,或者我在我的新G2上运行着更高版本的SQLite,该手机运行着2.2版本。真正的答案是要检查您特定的手机型号。 - Eno
Android.arch.persistence:db和android.arch.persistence:db-framework的1.0.0版本已于几周前发布。 - Prags
5个回答

530
这里有一个链接到官方文档,其中包含了这个答案中的主要要点:android.database.sqlite package-level javadoc 获取框架SQLite版本的Kotlin代码(提示:在您的Activity的onCreate()方法中设置一个断点,并在Evaluate Expression...中使用此代码):
val version = android.database.sqlite.SQLiteDatabase.create(null).use {
    android.database.DatabaseUtils.stringForQuery(it, "SELECT sqlite_version()", null)
};
"Framework (API ${android.os.Build.VERSION.SDK_INT}) SQLite version: $version".also { println(it) }

使用模拟器(请注意,实际设备上的SQLite版本将至少与指定版本相同):
API level* Version Name SQLite Notes
34 14 U 3.39.2 RIGHT and FULL OUTER JOIN
33 13 T 3.32.2
32 12L Sv2 3.32.2
31 12 S 3.32.2
30 11 R 3.28.0 window functions
29 10 Q 3.22.0
28 9 Pie 3.22.0
27 8.1 Oreo 3.19.4 see 3.19.3 and version control check-ins because 3.19.4 link does not exist
26 8.0 Oreo 3.18.2 O beta versions used 3.18.0
25 7.1.1 Nougat 3.9.2
24 7.0 Nougat 3.9.2
23 6.0 Marshmallow 3.8.10.2 M Preview 1 (SDK level 22) used 3.8.10
22 5.1.1 Lollipop 3.8.6.1 see 3.8.6 and version control check-ins because 3.8.6.1 link does not exist
21 5.0 Lollipop 3.8.6
20 4.4W.2 Android Wear unknown no emulator available, but probably either 3.7.11 or 3.8.4.3
19 4.4 KitKat 3.7.11
18 4.3 Jelly Bean 3.7.11
17 4.2 Jelly Bean 3.7.11
16** 4.1 Jelly Bean 3.7.11
15 4.0.3 Ice Cream Sandwich 3.7.4
14** 4.0 Ice Cream Sandwich 3.7.4
13 3.2 Honeycomb 3.7.4
12 3.1 Honeycomb 3.7.4
11** 3.0 Honeycomb 3.7.4
10 2.3.3 Gingerbread 3.6.22
9 2.3.1 Gingerbread 3.6.22
8** 2.2 Froyo 3.6.22
7 2.1 Eclair 3.5.9
4 1.6 Donut 3.5.9
3** 1.5 Cupcake 3.5.9
* Android API级别链接显示android.database.sqlite包的变化。没有链接的地方(例如API级别17)表示该包没有变化。
** 损坏的SDK链接,请参见此处 注意:如果您希望您的应用在所有Android版本上使用相同版本的SQLite,请考虑使用Requery的第三方SQLite支持库SQLCipher(如果您还希望加密)。

/system/bin/sh: sqlite3: 未找到 这是在已root的Android 4.0.2设备上。 - Pointer Null
谢谢 Mark。我有点困惑。在开发过程中,我如何确保所有设备上的 SQLite 版本保持一致?我的意思是 targetSdkVersionbuildTarget 是否会对此产生影响? - Muhammad Babar

60

尽管文档给出了3.4.0作为参考版本号,但是如果你执行以下SQL语句,你会发现SQLite安装的版本号要高得多:

Cursor cursor = SQLiteDatabase.create(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


3
我想3.4.0被给定为最低版本号 - 为了可移植性,除非你有一个非常好的理由,否则你不应该假设它是更高的版本。 - Eno
3
没错,你说得对。但是如果你需要使用一些高级功能以提高在较高版本的SQLite上的性能,你可以使用这段代码来查询并最终根据所部署的版本切换查询类型 :) - Juri
我的Droid使用自定义的2.2 ROM,也报告了3.6.22。 - Austyn Mahoney
我的Epic预发布2.2版本显示3.6.23 -- 数字似乎在逐渐增加。 - dhaag23
1
Nexus 7搭载Android 4.2,提供3.7.11。 - christophercotton
在Android Studio的Evaluate窗口中,可以使用DatabaseUtils.dumpCursorToString(openOrCreate...)一次性完成快速检查。 - TWiStErRob

25
$ adb shell sqlite3 --version 
3.5.9

在 ADP1 1.6 和 2.1 模拟器上同样表现相同。


它给我:sqlite3:权限被拒绝 - Yar
对我来说运行得很好。我打开了命令提示符并导航到 Android 文件夹,其中 adb.exe 位于其中。然后我输入了两个命令。 - Pavenhimself
11
在Nexus 4 KitKat上运行时,出现“/ system / bin / sh:sqlite3:未找到”的错误提示。 - Ben Clayton

7
Android API和支持的SQLite版本简介。

enter image description here

概述来自马克·卡特的回答中的链接。

4

在 Room 中,您可以查询:

SELECT sqlite_version()

RG


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接