如何为整个数据库定义常规属性

时间:2018-12-02 08:06:41

标签: sql database sqlite

我正在使用sqlite管理数据库,我想拥有一个常规财产 描述我的应用程序的版本。每次数据库更改都会更新此属性。有可能吗?

2 个答案:

答案 0 :(得分:2)

如果您要做的只是跟踪应用程序版本,则Sqlite可以使用几个编译指示来查询和设置数据库文件格式本身一部分的整数值。

  • APPLICATION_ID:这是分配给一个特定于应用程序的ID号,您可以检查该ID号以确保数据库是程序创建的,而不是其他任何东西。

    < / li>
  • USER_VERSION:这可能是您要使用的。我将其用于与您描述的相同的目的,将其与每个新表或任何其他表一起递增,以便将具有较旧模式版本的数据库加载到使用较新模式的程序中,然后可以相应地升级数据库

答案 1 :(得分:1)

  

有可能吗?

是,并且经常使用。

Android的 SQLiteOpenHelper 类(您可以将其子类化)检查传递的版本与存储的版本。

如果传递的版本高于存储的版本,则将调用onUpgrade方法(因此必须重写)。

如果版本较低,则使用onDowngrade方法(不是抽象方法,但如果未覆盖则导致异常)。

该值存储在 user_version 中(包括偏移量60-63,在数据库头中,数据库文件的第一部分),并且是32位有符号整数。

可以通过发出PRAGMA user_version进行读取,然后从结果集中提取为列 user_version

可以通过发出PRAGMA user_version = ?来设置(其中?是您想要设置的数字)。

可以设置的最大值为2147483647,最小值为-2147483648,超出此范围将导致值为0。

PRAGMA user_version;

例如:-

PRAGMA user_version = -2147483648;
PRAGMA user_version;
PRAGMA user_version = 2147483647;
PRAGMA user_version;

将导致两个请求,分别按照以下要求返回user_version(第2行和第4行):-

enter image description here

enter image description here

标题application_id中的后4个字节可以类似的方式使用。它旨在描述类似于.doc,.pdf等文件扩展名的文件类型,并在将Sqlite用作应用程序文件格式时使用。该值由应用程序询问,然后该应用程序相应地读取存储和检索数据。

它可能不是一个经常使用的值,因此也可以以相同的方式用于不同的PRAGMA。 PRAGMA application_idPRAGMA application_id = ?(同样,?是32位有符号整数)

PRAGMA application_id;

SQLite As An Application File Format

SQLite As An Application File Format - Benefits(short version)

Database File Format - The Database Header