一种基于Android终端的多数据库访问方法转让专利

申请号 : CN201310104184.1

文献号 : CN103136379B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 袁志坚张涛陈融王金双赵敏于晗陈萍

申请人 : 中国人民解放军理工大学

摘要 :

本发明一种基于Android终端的多数据库访问方法,首先在Android终端上构建主内容提供器-从内容提供器两者共存的访问架构;其次,将多个库表结构相同的数据库分别挂接到主内容提供器和从内容提供器,使得主内容提供器和从内容提供器对相应的数据库执行操作;最后主内容提供器、从内容提供器根据应用程序的调用请求实现对多个数据库的同时访问。本发明通过构建主内容提供器-从内容提供器的访问架构简化了原生Android的内容提供器对多个数据库访问时的复杂处理流程,提高了处理效率。

权利要求 :

1.一种基于Android终端的多数据库访问方法,其特征在于,包括以下步骤:步骤一、在Android终端上构建主内容提供器-从内容提供器两者共存的访问架构,具体为:(1-1)构建主内容提供器:该主内容提供器继承自原生Android内容提供器且具备原生Android内容提供器的所有接口;

(1-2)构建从内容提供器:该从内容提供器不继承自原生Android内容提供器,但具有与原生Android内容提供器相同的数据查询接口、数据插入接口、数据更新接口和数据删除接口;

(1-3)主内容提供器通过调用从内容提供器的数据查询接口、数据插入接口、数据更新接口和数据删除接口来构建两者的通信通道;

步骤二、将多个库表结构相同的数据库分别挂接到主内容提供器和从内容提供器,使得主内容提供器和从内容提供器对相应的数据库执行操作;

步骤三、主内容提供器、从内容提供器根据应用程序的调用请求实现对多个数据库的同时访问,具体为:(3-1)、应用程序调用主内容提供器的接口,当调用的接口为数据访问接口、数据插入接口、数据更新接口和数据删除接口时执行(3-2);否则,主内容提供器直接访问主数据库;

(3-2)、主内容提供器对该调用请求进行判断,具体如下:

解析调用请求中的URI,得到该调用请求中数据库对象的ID号或ID区间;如果该ID号属于从数据库或ID区间内存在属于从数据库的ID,则该调用请求由从内容提供器处理;否则由主内容提供器处理;

(3-3)、从内容提供器根据调用请求中数据库对象的ID号或ID区间,选择访问相应的主数据库和/或从数据库;并将访问结果反馈给主内容提供器。

2.根据权利要求1所述的基于Android终端的多数据库访问方法,其特征在于,所述步骤二中将多个库表结构相同的数据库分别挂接到主内容提供器和从内容提供器,使得主内容提供器和从内容提供器对相应的数据库执行操作,具体为:(2-1)、将多个库表结构相同的数据库划分为主数据库和从数据库,设置两者ID分界值,所述主数据库的ID小于等于分界值;所述从数据库为除主数据库之外的其他数据库,其数量为2-n个,n小于10;

(2-2)、将主数据库挂接到主内容提供器,主内容提供器只对主数据库进行操作;

(2-3)、将主数据库和从数据库挂接到从内容提供器,从内容提供器同时对所有数据库进行操作。

说明书 :

一种基于Android终端的多数据库访问方法

技术领域

[0001] 本发明属于智能手持终端操作系统领域,特别是一种基于Android终端的多数据库访问方法。

背景技术

[0002] Android是一个架构良好的层次化软硬件平台,可以分为四层:最上层为应用程序层,由操作系统厂商或者第三方开发人员提供多种功能的应用程序;第二层为应用框架层,提供应用程序运行的Java层框架及必要的基础服务等;第三层为系统运行库层,提供系统库和Android运行时库;最底层为Linux内核层,提供必要的操作系统内核驱动和硬件驱动。其中应用框架层是进行应用开发的基础,它提供了丰富的API接口,简化了组件的重用,应用程序开发者可以直接使用或继承这些组件进行快速的应用程序开发。
[0003] 内容提供器(ContentProvider)是应用框架层提供的一类重要组件,它为Android应用程序之间的数据访问和数据交换提供标准接口,待访问数据以通用资源标识符(Uniform Resource Identifier,简称URI)的形式提供给应用程序,应用程序无需知道数据的具体存储形式和存储位置。典型的内容提供器体系结构和交互流程如附图1所示,详细交互流程为:1)应用程序调用内容提供器的数据访问接口,包括数据查询接口query、数据插入接口insert、数据更新接口update和数据删除接口delete;2)内容提供器将数据访问接口的调用转换成URI匹配操作;3)URI匹配操作将数据访问接口的调用转换成SQL语句并对待访问数据进行实际操作;4)内容提供器将操作结果返回给应用程序。以上步骤对应用程序的用户都是透明的,用户无需了解内容提供器的实现细节。
[0004] URI是一种标识符,例如:content://com.android.contacts/contacts/1。URI由三部分组成:协议类型、资源提供方、数据路径,上例中”content://”为协议类型,”com.android.contacts”为资源提供方,”/contacts/1”为数据路径。通过URI可以映射到相应的数据,上例URI的含义是id为1的联系人。
[0005] 待访问数据依据其形态可分为文件、数据库、网络数据,其中数据库存储方式因其功能强大、访问便捷得到广泛应用。对于待访问数据存放在多个数据库而需要同时访问的情况,例如手机安全厂商将短信分为普通短信、秘密短信和机密短信分别存储,如何高效地同时操作多个相同库表结构的数据库是一个挑战。采用传统的方式为操作每个数据库撰写业务流程,包括创建数据表、索引、视图、触发器等,将产生大量冗余业务流程,给开发和维护带来极大不便。

发明内容

[0006] 本发明的目的在于提供一种基于Android终端的多数据库访问方法,使用该方法可以方便地同时操作Android终端中多个相同库表结构的数据库。
[0007] 实现本发明目的的技术方案为:一种基于Android终端的多数据库访问方法,该方法基于Android终端构建,具体包括以下步骤:
[0008] 步骤一、在Android终端上构建主内容提供器-从内容提供器两者共存的访问架构;
[0009] 步骤二、将多个库表结构相同的数据库分别挂接到主内容提供器和从内容提供器,使得主内容提供器和从内容提供器对相应的数据库执行操作;
[0010] 步骤三、主内容提供器、从内容提供器根据应用程序的调用请求实现对多个数据库的同时访问。
[0011] 进一步地优选方案,本发明基于Android终端的多数据库访问方法中,所述步骤一中构建主内容提供器-从内容提供器两者共存的的访问架构,具体为:
[0012] (1-1)构建主内容提供器:该主内容提供器继承自原生Android内容提供器且具备原生Android内容提供器的所有接口;
[0013] (1-2)构建从内容提供器:该从内容提供器不继承自原生Android内容提供器,但具有与原生Android内容提供器相同的数据查询接口、数据插入接口、数据更新接口和数据删除接口;
[0014] (1-3)主内容提供器通过调用从内容提供器的数据查询接口、数据插入接口、数据更新接口和数据删除接口来构建两者的通信通道。
[0015] 进一步地优选方案,本发明基于Android终端的多数据库访问方法中,所述步骤二中将多个库表结构相同的数据库分别挂接到主内容提供器和从内容提供器,使得主内容提供器和从内容提供器对相应的数据库执行操作,具体为:
[0016] (2-1)、将多个库表结构相同的数据库划分为主数据库和从数据库,设置两者ID分界值,所述主数据库的ID小于等于分界值;所述从数据库为除主数据库之外的其他数据库,其数量为2-n个,n小于10;
[0017] (2-2)、将主数据库挂接到主内容提供器,主内容提供器只对主数据库进行操作;
[0018] (2-3)、将主数据库和从数据库挂接到从内容提供器,从内容提供器同时对所有数据库进行操作。
[0019] 进一步地优选方案,本发明基于Android终端的多数据库访问方法中,所述步骤三中主内容提供器、从内容提供器根据应用程序的调用请求实现对多个数据库的同时访问,具体为:
[0020] (3-1)、应用程序调用主内容提供器的接口,当调用的接口为数据访问接口、数据插入接口、数据更新接口和数据删除接口时执行(3-2);否则,主内容提供器直接访问主数据库;
[0021] (3-2)、主内容提供器对该调用请求进行判断,具体如下:
[0022] 解析调用请求中的URI,得到该调用请求中数据库对象的ID号或ID区间:如果该ID号属于从数据库或ID区间内存在属于从数据库的ID,则该调用请求由从内容提供器处理;否则由主内容提供器处理。
[0023] (3-3)、从内容提供器根据调用请求中数据库对象的ID号或ID区间,选择访问相应的主数据库和/或从数据库;并将访问结果反馈给主内容提供器。
[0024] 本发明与现有技术相比,其显著优点为:(1)本发明通过构建主内容提供器-从内容提供器的访问架构简化了原生Android的内容提供器对多个数据库访问时的复杂处理流程,提高了处理效率;(2)本发明通过构建主数据库、从数据库的多数据库架构,实现不同密级的数据存储在不同的数据库中,保证数据的安全性,同时通过设置多数据库的ID分界值及主-从内容提供器的访问构建,实现了对多个数据库同时访问;(3)本发明在数据库数目变化的情况下系统结构无需改动,具有很好的自适应性。
[0025] 下面结合具体实施方式对本发明做进一步详细的描述:

附图说明

[0026] 图1是原生Android内容提供器的体系结构和交互流程图。
[0027] 图2是主内容提供器-从内容提供器的体系架构。

具体实施方式

[0028] 如图2,本发明的一种基于Android终端的多数据库访问方法,该方法基于Android终端实施,具体包括以下步骤:
[0029] 步骤一、在Android终端上构建主内容提供器-从内容提供器两者共存的访问架构,具体为:
[0030] (1-1)构建主内容提供器:该主内容提供器继承自原生Android内容提供器且具备原生Android内容提供器的所有接口;
[0031] (1-2)构建从内容提供器:该从内容提供器不继承自原生Android内容提供器,但具有与原生Android内容提供器相同的数据查询接口、数据插入接口、数据更新接口和数据删除接口;
[0032] (1-3)主内容提供器通过调用从内容提供器的数据查询接口、数据插入接口、数据更新接口和数据删除接口来构建两者的通信通道。
[0033] 步骤二、将多个库表结构相同的数据库分别挂接到主内容提供器和从内容提供器,使得主内容提供器和从内容提供器对相应的数据库执行操作,具体为:
[0034] (2-1)、将多个库表结构相同的数据库划分为主数据库和从数据库,设置两者ID分界值,所述主数据库的ID小于等于分界值;所述从数据库为除主数据库之外的其他数据库,其数量为2-n个,n小于10;
[0035] (2-2)、将主数据库挂接到主内容提供器,主内容提供器只对主数据库进行操作;
[0036] (2-3)、将主数据库和从数据库挂接到从内容提供器,从内容提供器同时对所有数据库进行操作。
[0037] 步骤三、主内容提供器、从内容提供器根据应用程序的调用请求实现对多个数据库的同时访问,具体为:
[0038] (3-1)、应用程序调用主内容提供器的接口,当调用的接口为数据访问接口、数据插入接口、数据更新接口和数据删除接口时执行(3-2);否则,主内容提供器直接访问主数据库;
[0039] (3-2)、主内容提供器对该调用请求进行判断,具体如下:
[0040] 解析调用请求中的URI,得到该调用请求中数据库对象的ID号或ID区间:如果该ID号属于从数据库或ID区间内存在属于从数据库的ID,则该调用请求由从内容提供器处理;否则由主内容提供器处理;
[0041] (3-3)、从内容提供器根据调用请求中数据库对象的ID号或ID区间,选择访问相应的主数据库和/或从数据库;并将访问结果反馈给主内容提供器。实施例
[0042] 短信数据库包括公开短信数据库、加密短信数据库,其中,公开短信数据库为主数据库,加密短信数据库为从数据库,两个数据库ID的分界值为10000,公开短信数据库的ID区间为[1,10000],加密短信数据库的ID区间[10001,20000],具体实施方式如下:
[0043] 步骤1、在Android终端上构建短信主内容提供器-短信从内容提供器的访问架构;
[0044] 步骤1-1、构建短信主内容提供器SMSContentProvider。直接继承原生Android内容提供器生成短信主内容提供器,短信主内容提供器具备原生Android内容提供器的所有接口和功能,包括数据查询接口、数据插入接口、数据更新接口和数据删除接口等。
[0045] 步骤1-2、构建短信从内容提供器SMSSlaveContentProvider,短信从内容提供器不继承自原生Android内容提供器,但是与原生Android内容提供器一样,具有数据查询接口、数据插入接口、数据更新接口和数据删除接口;
[0046] 步骤1-3、短信主内容提供器通过调用短信从内容提供器的数据查询接口来构建两者的通信通道,短信主内容提供器的查询接口修改后的伪代码如下:
[0047] public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder) {
[0048] cursor = mSMSSlaveContentProvider.query(uri, projection, selection, selectionArgs, sortOrder);
[0049] if(cursor == null) {
[0050]     cursor = queryFromMasterDb();
[0051] }
[0052] return cursor;
[0053] }
[0054] 步骤2,将公开短信数据库、加密短信数据库分别挂接到短信主内容提供器和短信从内容提供器,使得短信主内容提供器和短信从内容提供器可对相应的数据库执行操作:
[0055] 步骤2-1,将公开短信数据库挂接到短信主内容提供器,短信主内容提供器只对公开短信数据库进行操作,伪代码如下:
[0056] db.execSQL("ATTACH DATABASE ‘/sdcard/contacts.db’ AS contacts”);
[0057] 步骤2-2,将公开短信数据库和私密短信数据库挂接到短信从内容提供器,短信从内容提供器可同时对公开短信数据库和私密短信数据库进行操作。
[0058] 步骤3,短信应用程序对公开短信数据库和私密短信数据库同时进行操作,详细步骤如下:
[0059] 步骤3-1,短信应用程序调用短信主内容提供器的数据查询接口;
[0060] 步骤3-2, 解析调用请求中的URI,得到该调用请求中数据库对象的ID号为[9995,10005],该ID区间存在属于私密短信数据库的ID,因此该调用请求为由短信从内容提供器处理。
[0061] 步骤3-3,短信从内容提供器同时访问公开短信数据库和私密短信数据库, 并将访问结果反馈给短信主内容提供器,其伪代码如下:
[0062] public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
[0063] if(!mAttached) return null;
[0064] id = parseUri(uri);
[0065] if (id <10000)
[0066] return queryFromMainDB();  //实现查询主数据库数据功能
[0067] else
[0068] return queryFromAllDB();  //实现查询所有数据库数据功能。
[0069] 本发明对数据插入接口、数据更新接口和数据删除接口的实现过程与实施例中的数据查询接口的实现方法相同。