一种数据库的升级方法及系统技术领域
本发明涉及数据库技术领域,尤其涉及的是一种数据库的升级方法及其系统。
背景技术
现有技术中,进行数据库升级时,当有新表添加、旧表中字段更新等需求时,只能
通过修改原代码数据库,重新编译最后更新apk来实现,因此不仅过程复杂,工作量大,而且
制作过程长,不利于应用及软件平台的长期开发。
因此,现有技术有待于进一步的改进。
发明内容
鉴于上述现有技术中的不足之处,本发明的目的在于为用户提供一种数据库的升
级方法及系统,克服现有技术中数据库的升级时,操作过程复杂、工作量大,而且效率低的
缺陷。
本发明解决技术问题所采用的技术方案如下:
一种数据库的升级方法,其中,所述方法应用在Android系统的OSGI框架,其包括以下
步骤:
步骤A、从云端获取数据bundle文件的配置文件版本号;
步骤B、判断本地数据库中数据bundle文件的配置文件版本号是否低于云端配置文件
的版本号,若是,则执行步骤C,否则结束本次操作;
步骤C、从云端下载数据bundle文件及其配置文件,并从云端下载的配置文件中解析出
数据更新信息;
步骤D、根据下载的数据bundle文件和所述数据更新信息对本地数据库进行升级。
所述的数据库的升级方法,其中,所述步骤A之前还包括:
步骤A01、将应用按照逻辑划分为数据类和业务类,并分别将数据类对应的java文件和
业务类对应的java文件编译成数据bundle文件和业务bundle文件;
步骤A02、数据bundle文件和业务bundle文件在OSGI框架中获取BundleContext,并通
过调用BundleContext安装指令对数据bundle文件和业务bundle文件进行安装;
步骤A03、获取已安装的数据bundle文件和业务bundle文件信息,同时启动后的数据
bundle文件根据数据bundle应用包名、数据bundle文件安装返回的bundle ID建立本地数
据库。
所述的数据库的升级方法,其中,所述步骤D还包括:
D1、卸载本地数据库中与从云端下载的数据bundle文件名称相同的bundle文件,安装
云端下载的数据bundle文件并启动。
所述的数据库的升级方法,其中,所述步骤D1中数据bundle文件的启动包括步骤:
步骤D11、判断数据更新信息所对应的操作是否包括添加表或/和更新表字段,若包括
添加表,则执行步骤D12,若包括更新表字段,则执行步骤D13;
步骤D12、获取数据更新信息中添加表的表名,根据所述表名获取表字段名,并根据表
字段名和表名创建表;
步骤D13、获取更新数据信息中增加表字段的表名,根据所述表名获取更新的字段名,
并根据所述表名更新表中的字段;
步骤D14、执行本地数据库升级操作,并更新本地数据库版本号。
所述的数据库的升级方法,其中,所述步骤A03包括步骤:
步骤A031、业务bundle向数据bundle输入预设参数,启动数据bundle文件执行所述数
据bundle文件所对应模块的功能。
一种数据库的升级系统,其中,包括:
云端数据获取模块,用于从云端获取数据bundle文件的配置文件版本号;;
版本判断模块,用于、判断本地数据库中数据bundle文件的配置文件版本号是否低于
云端配置文件版本号;
配置解析模块,用于当本地数据库中数据bundle文件的配置文件版本号低于云端数据
bundle文件的配置文件版本号时,从云端下载数据bundle文件及其配置文件,并从云端下
载的配置文件中解析出数据更新信息;
数据库升级模块,用于根据下载的数据bundle文件和所述数据更新信息对本地数据库
进行升级。
所述的数据库的升级系统,其中,所述系统还包括:
应用划分模块,用于将应用按照逻辑划分为数据类和业务类,并分别将数据类对应的
java文件和业务类对应的java文件编译成数据bundle文件和业务bundle文件;
安装文件模块,用于数据bundle文件和业务bundle文件在OSGI框架中获取
BundleContext,并通过调用BundleContext安装指令对数据bundle文件和业务bundle文件
进行安装;
建立数据库模块,用于获取已安装的数据bundle文件和业务bundle文件信息,同时启
动后的数据bundle文件根据数据bundle应用包名、数据bundle文件安装返回的bundle ID
建立本地数据库。
所述的数据库的升级系统,其中,所述数据库升级模块还用于:卸载本地数据库中
与从云端下载的数据bundle文件名称相同的bundle文件,安装云端下载的数据bundle文件
并启动。
所述的数据库的升级系统,其中,所述数据库升级模块包括:
判断动作单元,用于判断数据更新信息所对应的操作是否包括添加表或/和更新表字
段;
表创建单元,用于获取数据更新信息中添加表的表名,根据所述表名获取表字段名,并
根据表字段名和表名创建表;
更新表字段单元,用于获取更新数据信息中增加表字段的表名,根据所述表名获取更
新的字段名,并根据所述表名更新表中的字段;
更新数据库单元,用于执行本地数据库升级操作,并更新本地数据库版本号。
所述的数据库的升级系统,其中,安装文件模块包括:数据bundle启动单元,用于
业务bundle向数据bundle输入预设参数,启动数据bundle文件执行所述数据bundle文件所
对应模块的功能。
有益效果,本发明提供了一种数据库的升级方法及其系统,通过从云端获取数据
bundle文件的配置文件版本号,判断本地数据库中数据bundle文件的配置文件版本号是否
低于云端配置文件的版本号,若是,则从云端下载数据bundle文件及其配置文件,并从云端
下载的配置文件中解析出数据更新信息,根据下载的数据bundle文件和所述数据更新信息
对本地数据库进行升级。本发明所提供方法和系统,由于将应用分成数据部分与业务部分,
降低两者耦合性,因此可实现在不影响业务的情况下,实现数据库的升级与更新,为人员的
工作带来便利。
附图说明
图1是本发明所提供的数据库的升级方法的步骤流程图。
图2是本发明所述方法具体实施例中本地数据库构建原理示意图。
图3是本发明的所述方法的具体实施例的步骤流程图。
图4是本发明所提供的数据库的升级系统的原理结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对
本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用
于限定本发明。
OSGI(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系
列规范。OSGI一方面指维护OSGI规范的OSGI官方联盟,另一方面指的是该组织维护的基于
Java语言的服务(业务)规范。简单来说,OSGi可以认为是Java平台的模块层。
OSGI服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选
环境。Java提供在多个平台支持产品的可移植性。OSGI技术提供允许应用程序使用精炼、可
重用和可协作的组件构建的标准化原语。这些组件能够组装进一个应用和部署中。
OSGI服务平台由两部分组成:OSGI框架和OSGI标准服务。OSGI框架是实现并提供
OSGI功能的运行环境,OSGI标准服务定义了很多用于执行常见任务的可重用API。OSGI框架
和标准服务的规范由OSGI联盟管理。bundle 是 OSGi 中的模块模型。标准 Java 平台的
jar 包中包含有 class 文件以及相应的资源文件,bundle 可以简单地理解为是增加了元
数据的 jar 包。一个bundle 中包含了 java 类和一些其他的数据资源,这些数据可以是
HTML 文件、帮助文档以及图标等。
从用户层可以把 bundle 理解为一个功能模块。bundle 可以从项目中导入导出,
并且能够与项目中的其他 bundle 共享 jar文件。bundle 为 OSGi 框架提供服务,是
OSGi 服务框架中唯一需要部署的实体。bundle 一旦开始运行,就会通过 OSGi 框架向框
架中其他 bundle 提供功能和服务。
便于描述,本发明中将bundle定义为:一个模块化的物理单元,以jar文件形式包
含代码、资源和元数据,其中jar文件的边界也作为执行时逻辑模块化的封装边界。
由于现有技术中对数据库进行升级时,需要通过修改原代码数据库,重新编译最
后更新apk来实现,因此不仅过程复杂,工作量大,本发明采用的方法为将应用分成数据
bundle文件和业务bundle文件,通过业务bundle文件启动数据bundle文件从云端获取升级
版的配置文件,从而实现对数据库的升级。
本发明提供的一种数据库的升级方法,如图1所述,所述方法应用在Android系统
的OSGI框架,其包括以下步骤:
步骤S1、从云端获取数据bundle文件的配置文件版本号。
系统在开始数据库升级时,通过启动数据bundle文件,从云端获取存储在云端数
据库中的数据bundle文件的配置文件版本号,通过获取到的版本号与本地数据库中数据
bundle文件的配置文件版本号的比较来判断是否进行升级操作。
具体的,为了实现减少本地数据库中数据部分与业务部分的耦合性,在本步骤之
前通过以下步骤建立本地数据库,结合图2所述,其包括:
步骤S01、将应用按照逻辑划分为数据类和业务类,并分别将数据类对应的java文件和
业务类对应的java文件编译成数据bundle文件和业务bundle文件。
首先将应用按照逻辑划分为数据部分和业务部分,分别对这两个部分所对应的
java文件进行编译,得到数据部分对应的数据bundle文件和业务bundle文件。
步骤S02、数据bundle文件和业务bundle文件在OSGI框架中获取BundleContext,
并通过调用BundleContext的安装指令对数据bundle文件和业务bundle文件进行安装,所
述BundleContext的安装指令通过函数BundleContext.install()实现。
步骤S03、获取已安装的数据bundle文件和业务bundle文件信息,同时启动后的数
据bundle文件根据数据bundle应用包名、数据bundle文件安装返回的bundle ID建立本地
数据库。
由于建立的本地是数据库是将应用分成数据部分和业务部分,且通过bundle来相
互调用,因此可以根据获取的数据bundle文件的更新信息,对数据库进行升级,避免了需要
重新修改代码和重新编译最后更新apk的方法来升级数据库。
步骤S2、判断本地数据库中数据bundle文件的配置文件版本号是否低于云端配置
文件的版本号,若是,则执行步骤S3,否则结束本次操作。
将从云端获取的配置文件版本号与本地配置文件的版本号进行比较,若本地配置
文件的版本号低于云端,则判定本地数据库中的数据bundle文件非最新版本,则需要对其
进行进一步的升级操作。若版本号相同,本次升级操作结束。
步骤S3、从云端下载数据bundle文件及其配置文件,并从云端下载的配置文件中
解析出数据更新信息。
若需要升级操作,则从云端下载最新版本的数据bundle文件和其配置文件,从其
配置文件中解析出本次新版本的数据bundle文件中更新的部分为增加了表还是对旧表中
表字段的更新。
步骤S4、根据下载的数据bundle文件和所述数据更新信息对本地数据库进行升
级。
根据下载的数据bundle文件和配置文件中解析出的数据更新信息对数据库进行
升级操作。
具体的,所述步骤S4还包括:
S41、卸载本地数据库中与从云端下载的数据bundle文件名称相同的bundle文件,安装
云端下载的数据bundle文件并启动。
由于下载到了最新版本,因此可以想到的是,将旧版本删除,并对最新版本进行安
装操作。
为了实现对数据更新信息的快速获取和根据获取的信息进行数据库升级,在所述
步骤S41中数据bundle文件的启动包括步骤:
步骤S411、判断数据更新信息所对应的操作是否包括添加表或/和更新表字段,若包括
添加表,则执行步骤S412,若包括更新表字段,则执行步骤S413;
步骤S412、获取数据更新信息中添加表的表名,根据所述表名获取表字段名,并根据表
字段名和表名创建表;
步骤S413、获取更新数据信息中增加表字段的表名,根据所述表名获取更新的字段名,
并根据所述表名更新表中的字段;
步骤S414、执行本地数据库升级操作,并更新本地数据库版本号。
具体的,业务bundle文件与数据bundle文件之间互相调用的协议如下:
数据bundle文件提供增、删、改、查四个接口供业务bundle文件访问数据库中数据,其
中业务bundle向数据bundle输入预设参数,启动数据bundle以执行该bundle模块对应的功
能。数据bundle文件启动后,根据表名以及表结构建立数据库。在这里,接口协议中包括输
入部分和输出部分。其中,输入部分定义了业务bundle要向数据bundle模块输入的参数,如
输入参数uri、查询条件、查询结果数据排序方式等。输出部分定义了数据bundle向业务部
分返回的结果。
增加数据接口可如下定义:
boolean insert(Uri uri, ContentValues values)
该方法用于供业务部分往数据库添加数据。如果成功,返回true,否则,返回false.uri
参数是Uri.parse("content://" + AUTHORITY + "/items")格式,AUTHORITY与items可从
数据bundle配置文件中获取。Values是需要增加的数据。
删除数据接口可如下定义:
Boolean delete(Uri uri, String selection, String[] selectionArgs) 该方法
用于供业务部分从数据库中删除数据。如果成功,返回true,否则,返回false.uri参数是
Uri.parse("content://" + AUTHORITY + "/items")格式,AUTHORITY与items可从数据
bundle配置文件中获取。selection和selectionArgs参数是设置条件。
更新数据接口可如下定义:
boolean update(Uri uri, ContentValues values, String selection, String[]
selectionArgs)
该方法用于供业务部分更新数据库中的数据。如果成功,返回true,否则,返回
false.uri参数是Uri.parse("content://" + AUTHORITY + "/items")格式,AUTHORITY与
items可从数据bundle配置文件中获取。Values是需要更新的数据。selection和
selectionArgs参数是设置条件。
查询数据接口可如下定义:
Cursor query(Uri uri, String[] projection, String selection, String[]
selectionArgs, String sortOrder) 该方法用于供业务部分从数据库中获取数据。如果
成功,返回待查询的数据,否则,返回空。uri参数是Uri.parse("content://" + AUTHORITY
+ "/items")格式,AUTHORITY与items可从数据bundle配置文件中获取。selection参数是
设置条件。projection参数是通过数据库查询的数控要返回的列。selection和
selectionArgs参数是设置条件。sortOrder参数是返回结果排序的方式。
在嵌入OSGI 框架的Android系统中启动应用步骤如下:
1.通过GetFrameworkService服务的代理GetFrameworkServiceProxy,获取到OSGI框
架实例。如getFrameworkInstance()方法。
2.通过调用Framework.getBundleContext()方法获取BundleContext。
3.通过调用BundleContext.install(String location)方法安装bundle文件,直
至所有bundle文件安装完毕。其中参数location是该bundle文件存放路径。 当安装成功
后,会返回已安装的Bundle的 Bundle ID(Bundle Identifier)。Bundle ID是运行期最常
用的标识符。它是由OSGI框架自动分配的一个长整型数字,在Bundle整个生命周期内(包括
Bundle更新、卸载之后)都不会改变, 甚至在OSGI框架重启后都能保留下来。Bundle ID是
在Bundle安装过程中由OSGI框架根据Bundle安装时间的先后次序, 由小到大进行分配的。
可以通过Bundle接口的getBundleId ()方法来获取当前Bundle的ID。
4通过调用安装成功返回的Bundle的getBundleId()方法来获取当前Bundle的ID。
并通过调用Bundle的getSymbolicName()方法和getVersion()分别获取到该bundle的符
号名称和版本号
5.建立数据库存储每一个bundle ID 、bundle文件包名、bunlde的符号名称版本号、
Import-Package和 Export-Package属性。
6.通过BundleContext.start()方法启动bundle文件。
7.至此,应用启动起来,会获取本地配置文件版本号,以及从云端获取云端配置文
件版本号,并比较两者,如果本地配置文件版本号不低于云端获取的配置文件版本号,则应
用正常进行,否则,执行更新模块功能。
经过上述的设置之后,如图3所示,在具体实施数据库的升级操作时,包括以下步
骤:
步骤H1、获取云端配置文件,具体的所述数据bundle文件的配置文件格式如下:
数据bundle配置文件:
配置文件版本号:
动作action:
增加新表add_newTableName:
新表1 :表字段1, 表字段2,…., 表字段n,
新表2 :表字段1, 表字段2,…., 表字段n,
…
新表n :表字段1, 表字段2,…., 表字段n,
增加表字段 add_tableName_newSeg:
旧表1 :表字段1, 表字段2,…., 表字段n,
旧表2 :表字段1, 表字段2,…., 表字段n,
…
旧表n :表字段1, 表字段2,…., 表字段n,
步骤H2、判断本地配置文件版本号是否低于云端配置文件版本号,如果是,则执行步骤
H3,否则结束;
步骤H3、更新本地配置文件版本号;
步骤H4、根据配置文件中的url地址,下载新的数据bundle文件;
步骤H5、 解析配置文件;
步骤H6、判断动作为增加表还是增加表字段,如果配置文件中的动作是增加表:add_
newTableName,则执行步骤H7,如果配置文件中的动作是增加表字段:add_tableName_
newSeg,则执行步骤12,否则结束;
步骤H7、 从配置文件中获取增加的表名;
步骤H8、 从配置文件中根据增加的表名,获取该表字段名;
步骤H9、根据表字段名和表名创建该表;
步骤H10、 执行数据库升级操作;
步骤H11、 数据库版本号更新,跳至步骤16;
步骤H12、从配置文件中获取更新表字段的表名;
步骤H13、根据上述步骤中表名获取该表待更新的字段名;
步骤H14、根据表名更新该表中字段,跳至步骤H10;
步骤H15、结束。
本发明所述的方法应用在Android的智能设备中,通过将应用分成数据部分与业
务部分,降低数据部分和业务部分之间的耦合性,因此可以仅仅通过从云端获取到数据
bundle文件及其配置文件,便可以轻松实现数据库的升级和更新,为人员的工作带来便利。
在上述方法的前提下,本发明还提供了一种数据库的升级系统,如图4所示,包括:
云端数据获取模块100,用于从云端获取数据bundle文件的配置文件版本号;其功能如
步骤S1所述。
版本判断模块200,用于判断本地数据库中数据bundle文件的配置文件版本号是
否低于云端配置文件版本号;其功能如步骤S2所述。
配置解析模块300,用于当本地数据库中数据bundle文件的配置文件版本号低于
云端数据bundle文件的配置文件版本号时,从从云端下载数据bundle文件及其配置文件,
并从云端下载的配置文件中解析出数据更新信息;其功能如步骤S3所述。
数据库升级模块400,用于根据下载的数据bundle文件和所述数据更新信息对本
地数据库进行升级。其功能如步骤S4所述。
所述系统还包括:
应用划分模块,用于将应用按照逻辑划分为数据类和业务类,并分别将数据类对应的
java文件和业务类对应的java文件编译成数据bundle文件和业务bundle文件;
安装文件模块,用于数据bundle文件和业务bundle文件在OSGI框架中获取
BundleContext,并通过调用BundleContext安装指令对数据bundle文件和业务bundle文件
进行安装;
建立数据库模块,用于获取已安装的数据bundle文件和业务bundle文件信息,同时启
动后的数据bundle文件根据数据bundle应用包名、数据bundle文件安装返回的bundle ID
建立本地数据库。
所述数据库升级模块还用于:卸载本地数据库中与从云端下载的数据bundle文件
名称相同的bundle文件,安装云端下载的数据bundle文件并启动。
所述数据库升级模块包括:
判断动作单元,用于判断数据更新信息所对应的操作是否包括添加表或/和更新表字
段;
表创建单元,用于获取数据更新信息中添加表的表名,根据所述表名获取表字段名,并
根据表字段名和表名创建表;
更新表字段单元,用于获取更新数据信息中增加表字段的表名,根据所述表名获取更
新的字段名,并根据所述表名更新表中的字段;
更新数据库单元,用于执行本地数据库升级操作,并更新本地数据库版本号。
安装文件模块包括:数据bundle启动单元,用于业务bundle向数据bundle输入预
设参数,启动数据bundle文件执行所述数据bundle文件所对应模块的功能。
本发明提供了一种数据库的升级方法及其系统,通过从云端获取数据bundle文件
的配置文件版本号,判断本地数据库中数据bundle文件的配置文件版本号是否低于云端配
置文件的版本号,若是,则从云端下载数据bundle文件及其配置文件,并从云端下载的配置
文件中解析出数据更新信息,根据下载的数据bundle文件和所述数据更新信息对本地数据
库进行升级。本发明所提供方法和系统,由于将应用分成数据部分与业务部分,降低两者耦
合性,因此可实现在不影响业务的情况下,实现数据库的升级与更新,为人员的工作带来便
利。
可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发
明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保
护范围。