数据存储二:数据库存储
数据存储二:数据库存储
实验目的
1.掌握使用adb访问SQLite的基本命令;
2.掌握Android操作系统下对SQLite关系型数据库实现增、删、改、查等基本操作;
3.掌握实用ContentProvider共享数据的方法。
实验内容
分别使用sqlite3工具和Android代码的方式建立SQLite数据库,数据库名称为staff.db,并建立staff数据表,表内的属性值如下表所示:
属性 | 数据类型 |说明
:-: | :-: | :-:
_id | integer | 主键
name | text | 姓名(非空)
sex | text | 性别
department | text | 所在部门
salary | float | 工资
在完成建立数据库的工作后,编程实现基本的数据库操作功能,包括数据的添加、删除和更新,并尝试将下表中的数据添加到staff表中。
_id | name | sex | department | salary
:-: | :-: | :-: | :-: | :-:
1 | Tom | male | computer | 5400
2 | Einstein | male | computer | 4800
3 | Lily | female | finance | 5000
4 | Warner | male | finance | 5500
5 | Napoleon | male | HR | 6000
最后,建立一个ContentProvider,用来共享新建的数据库,并尝试使用ContentResolver在其它进程中对数据库进行操作。
实验原理
一、SQLite数据库
Android操作系统采用标准SQLite数据库,提供管理数据库相关的API。SQLite数据库与常用PostgresSQL和MySQL一样,是属于RDBMS的一种,但不同的是,SQLite数据库常用到的类有4种:SQLiteOpenHelper,负责创建与打开数据库和版本管理,建立此类时,同时需要建立3个回调(Call Back)方法,分别是创建(onCreat)、更新(onUpdate)和打开(onOpen);SQLiteDataBase类管理数据库本体,提供添加(Insert)、更新(Update)、删除(Delete)、检索(Query)、执行SQL指令和其他管理数据库的功能;SQLiteCursor,表示当检索(Query)数据库时,指示到查询结果的初始位置;ContentValues,用来存储和保持表中的某行的相关数据,提供添加(Insert)、更新(Update)和删除(Delete)功能。
首先,利用SQLiteOpenHelper类来创建与打开数据库,建立此类时,同时需要建立3个Call Back方法,分别是创建onCreat()、更新onUpdate()和打开onOpen()。但是,SQLiteOpenHelper类并没有实际上创建与打开数据库,仅仅保持和数据接连的管道,还需要在SQLiteOpenHelper类上调用getWriteableDatabase()或getReadableDatabase()方法才会得到数据库SQLiteOpen类。
二、Content Providers
一般计算机所使用的操作系统大都会提供共享文件机制,让应用程序彼此间可以存储和访问文件,数据可以相互共享。Android操作系统所采用的方法是不同的,在Android操作系统中,所有应用程序的数据和文件都是属于该应用程序所私有的。但是Android操作系统通过提供内容提供器(Content Providers)方法来公开数据,可以公开数据到数据内容容器内,其他应用程序经过授权可以读取。数据内容提供器的数据类型可以是图像(Image)、音频(Audio)、视频(Video)和个人通讯薄(Personal Content Information)。Content Providers 为存储和获取数据提供了统一的接口,使得在不同的应用程序之间可以共享数据。调用Content Providers可以访问这些数据库,而不用关心存储的细节。内容提供器是应用程序的一个可选的机制,它提供标准语法来读取和写入数据。
实现内容提供器和实现SQLite数据库有什么不同呢?应用程序实现SQLite数据库时,由应用程序直接和数据库接口,所以在应用程序中需要实现SQLite的接口db.onCreate()、db.insert ()、db.update()、db.delete()、db.query()和db.close(),而实现内容提供器时,在应用程序和数据库之间要实现一个Content Providers程序,这个Content Providers程序会直接和数据库接口,此时应用程序需要实现和Content Providers程序接口的方法。
建立内容提供器的实现,要先完成以下3项工作:建立一个系统来存储数据,大部分内容提供器(Content Providers)采用Android文件存储方法或以SQLite数据库来管理;继承ContentProvider类来读取数据,要读取数据的应用程序要通过ContentResolver和Cursor类来实现;在要读取数据的应用程序的AndroidManifest.XML配置文件内声明一个公开的URI。
实验步骤:
要求:
1)可以参考教材上的例子,但一定不要直接拷贝;
2)将实验代码和运行效果截图放在实验报告中提交。
1.使用adb手工创建数据库。
使用adb shell连接到模拟器,并使用sqlite3工具创建一个名为Staff.db(注意大小写)的数据库,并建立一个名为“Staffinfo”的表(可以使用sql插入部分数据)。建立好的Staff.db如下图所示。
2.创建应用程序并在应用程序中创建数据库并实现添加、修改、删除、查询数据。
3.在应用程序中创建一个名为“StaffProvider”的ContentProvider,对外提供对Staff数据库的查询、插入、更新和删除操作
4.新建一个包含Activity的项目,在项目中调用步骤3的接口,实现数据查询的功能。如下图所示。
程序一源代码
DisplayActivity.java
1 | package com.example.greendaodemo.activity; |
MainActivity.java
1 | package com.example.greendaodemo.activity; |
SearchActivity.java
1 | package com.example.greendaodemo.activity; |
UserAdapter.java
1 | package com.example.greendaodemo.adapter; |
DaoApp.java
1 | package com.example.greendaodemo.app; |
Users.java
1 | package com.example.greendaodemo.app; |
MigrationHelper.java
1 | package com.example.greendaodemo.sqlit.helper; |
SQLiteDBOpenHelper
1 | package com.example.greendaodemo.sqlit.helper; |
activity_display.xml
1 |
|
activity_main.xml
1 |
|
activity_search.xml
1 |
|
layout_list_item.xml
1 |
|
程序一功能简介
(中间有一段视频)需要打开html文件进行观看