Android使用的SQLite版本是什么?
原因:我想知道如何处理模式迁移。新的SQLite版本支持“ALTER TABLE”SQL命令,这将节省我必须复制数据,删除表,重新创建表和重新插入数据。
Android使用的SQLite版本是什么?
原因:我想知道如何处理模式迁移。新的SQLite版本支持“ALTER TABLE”SQL命令,这将节省我必须复制数据,删除表,重新创建表和重新插入数据。
虽然文档给出了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。
这里有一个官方文档的链接,其中包括这个答案的要点:android.database.sqlite包级javadoc
Kotlin代码获得框架SQLite版本(提示:只需在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 |
---|---|---|---|---|
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(如果你还想加密)。