【问题标题】:Version of SQLite used in Android?Android中使用的SQLite版本?
【发布时间】:2011-01-26 03:27:52
【问题描述】:

Android 使用的 SQLite 版本是多少?

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

【问题讨论】:

  • 您仍然可能需要复制-删除-重新创建-重新插入; SQLite 的 ALTER TABLE 功能不是很全。
  • 请选择正确答案,3.4.0不对
  • 这不取决于您运行的 Android 版本吗?我可能确实在运行 1.6 的旧 myTouch 上安装了 SQLite 3.4.x,或者我可能在运行 2.2 的新 G2 上安装了更高版本。真正的答案是检查您的特定手机。
  • 1.0.0 of android.arch.persistence:db 和 android.arch.persistence:db-framework 几周前发货。

标签: database android sqlite schema migration


【解决方案1】:

这是官方文档的链接,其中包含此答案中的要点:android.database.sqlite package-level javadoc

获取框架 SQLite 版本的 Kotlin 代码:

val version = android.database.sqlite.SQLiteDatabase.create(null).use {
    DatabaseUtils.stringForQuery(it, "SELECT sqlite_version()", null)
}
println("Framework (API ${Build.VERSION.SDK_INT}) SQLite version: $version")

使用模拟器(注意,实际设备上的 SQLite 版本将是至少指定的):

API level* Version Name SQLite Notes
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链接失效,见here

注意:如果您希望您的应用在所有 Android 版本中使用相同版本的 SQLite,请考虑使用 Requery 的 3rd party SQLite support librarySQLCipher(如果您还需要加密)。

【讨论】:

  • /system/bin/sh: sqlite3: not found 这是在根植的 Android 4.0.2 设备上
  • 谢谢。我有点困惑。在开发过程中,如何确保我的 sqlite 版本在所有设备上保持一致?我的意思是targetSdkVersionbuildTarget 对此有什么影响吗?
【解决方案2】:

虽然文档给出了 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.4.0 是作为最低版本提供的 # - 出于可移植性考虑,您可能不应该假设它是更高版本,除非您有充分的理由这样做。
  • 当然,你是对的。但是如果你必须使用一些高级特性来提高 SQLite 更高版本的性能,你可以使用代码来查询并最终根据部署的版本切换查询类型:)
  • 带有自定义 2.2 ROM 的我的 Droid 也报告 3.6.22
  • 我的 Epic 与预发布 2.2 说是 3.6.23 -- 数字似乎在慢慢上升。
  • Nexus 7 与 Android 4.2,提供 3.7.11
【解决方案3】:
$ adb shell sqlite3 --version 
3.5.9

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

【讨论】:

  • 它给了我:sqlite3:权限被拒绝
  • 对我来说效果很好。我打开 cmd 提示符并导航到 adb.exe 所在的 android 文件夹。然后我输入了两个命令
  • 在 Nexus 4 KitKat 上给出“/system/bin/sh: sqlite3: not found”。
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    房间内可以查询

    选择 sqlite_version()

    RG

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多