介绍下android的数据存储方式,Android笔记——Android中数据的存储方式(三)

Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它。SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存取,现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,并且它是以手机内存为储存的。

那么,实际开发项目中有大量数据需要读写,并且需要面临大量用户的并发储存的情况呢。就不应该把数据存放在手机等移动设备的SQLite数据库里,移动设备的储存能力和计算能力都不足以让它充当服务器的角色。虽然SQLite支持大部分SQL-92语法,也可以使用SQL语句,和其他的主要 SQL 数据库没什么区别。但SQLite并不像Oracle、MySQL数据库那样需要安装、启动服务器进程,SQLite数据库只是一个文件。

综上所述,我们可以总结出SQLite数据库的特点:

面向资源有限的设备;

没有服务器进程;

所有数据存放在同一文件中,可自由复制;

跨平台;

操作方便,使用标准的CRUDE语句,ContentResolver.query(), update(), delete() insert()。

还有其他的特点:效率出众,这是无可否认的; 十分适合存储结构化数据 ;方便在不同的Activity,甚至不同的应用之间传递数据。

1.3  例子

4.  SQLite数据库:

3.1 案例:创建SQLite数据库

创建数据库需要使用的api:SQLiteOpenHelper

必须定义一个构造方法:

//arg2:数据库文件的名字

//arg3:游标工厂

//arg4:数据库版本

public MyOpenHelper(Context context, String name, CursorFactory factory, int version){}

数据库被创建时会调用:onCreate方法

数据库升级时会调用:onUpgrade方法

创建数据库步骤:

//创建OpenHelper对象

MyOpenHelper oh = new MyOpenHelper(getContext(), "person.db", null, 1);

//获得数据库对象,如果数据库不存在,先创建数据库,后获得,如果存在,则直接获得

SQLiteDatabase db = oh.getWritableDatabase();

getWritableDatabase():打开可读写的数据库

getReadableDatabase():在磁盘空间不足时打开只读数据库,否则打开可读写数据库

在创建数据库时创建表

public void onCreate(SQLiteDatabase db) {

// TODO Auto-generated method stub

db.execSQL("create table person (_id integer primary key autoincrement, name char(10), phone char(20), money integer(20))");

}

代码:

创建MyOpenHelper类继承 SQLiteOpenHelper

packagecom.bokeyuan.createsqlite;importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteDatabase.CursorFactory;importandroid.database.sqlite.SQLiteOpenHelper;public class MyOpenHelper extendsSQLiteOpenHelper {publicMyOpenHelper(Context context, String name, CursorFactory factory,intversion) {//name:数据库文件的名字//factory:游标工厂//version:数据库的版本号

super(context, name, factory, version);//TODO Auto-generated constructor stub

}//数据库创建时,此方法调用

@Overridepublic voidonCreate(SQLiteDatabase db) {//TODO Auto-generated method stub

System.out.println("数据库被创建了");

//创建表

db.execSQL("create table person(_id integer primary key autoincrement, name char(10), phone char(20), money integer(10))");

}//数据库升级时,此方法调用

@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion) {//TODO Auto-generated method stub

System.out.println("数据库升级了");

}

}

这里不再用前台视图布局,直接用单元测试框架。

在com.bokeyuan.createsqlite.domian包中创建Test.java 并继承 AndroidTestCase类。

packagecom.bokeyuan.createsqlite.domian;importcom.bokeyuan.createsqlite.MyOpenHelper;importandroid.database.sqlite.SQLiteDatabase;importandroid.test.AndroidTestCase;public class Test extendsAndroidTestCase {public voidTest() {//创建数据库//1.创建OpenHelper对象//获取一个虚拟上下文

MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 2);//2.创建数据库//如果数据库不存在,那么先创建,再打开,如果数据库已经存在,侧直接打开

SQLiteDatabase db =oh.getWritableDatabase();//如果磁盘不足,数据库只读//SQLiteDatabase db = oh.getReadableDatabase();

}

}

在清单文件AndroidManifest.xml设置指令集和库:

android:name="android.test.InstrumentationTestRunner"

android:targetPackage="com.bokeyuan.createsqlite">

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

View Code

数据库存储在 data/< 项目文件夹 >/databases/ 下。我们可以用SQLite Professional打开。

4d2eedf4b5fd021b9e5262a78ab71f5b.png

数据库创建时,此方法调用  说明onCreate()方法被调用了,数据库被创建了

9639f3718ed96c473783addd898e4724.png

把version改成2,Run As →Android JUint Test后, 调用onUpgrade()方法,数据库升级了

//1.创建OpenHelper对象

//获取一个虚拟上下文

MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 2);

52bf7de73db98152460d528e7e23deb3.png

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值