学习文件I/O操作,不学习一下数据库操作,是不是很不完美。
那么就把试验进行到底。
继续参考上一个试验的那本书完成SQLite的第一个试验,希望我在今天睡觉前能完成。
SQLite 数据库介绍
当应用程序需要处理的数据量比较大时,为了更加合理地存储、管理、查询数据,我们往往使用关系数据库来存储数据。Android平台为开发者提供了SQLite数据库相关的API来实现对数据库操作的支持,开发人员可以很方便地使用这些API来对SQLite数据库进行创建、修改及查询等操作。Android系统的很多用户数据,如联系人信息、通话记录、短信息等,都是存储在SQLite数据库当中的,所以利用操作SQLite数据库的API可以同样方便地访问甚至修改这些数据。
SQLite是D. Richard Hipp用C语言编写的开源嵌入式数据库引擎。它是完全独立的,不具有外部依赖性。SQLite非常健壮,其创建者保守地估计SQLite可以处理每天多达100 000次点击率的Web站点,有时候甚至可以处理上述数字的10倍负载。最重要地,SQLite是一个轻量级的数据库, 在一些简单语句的处理性能上比Mysql或Postgresql都要快。对于内存有限的Android手持设备而言,当然是对时间空间要求越低的数据库引擎越好。
从功能上看,SQLite支持多数SQL92标准,可以在所有主流的操作系统上运行,并且支持大多数计算机语言。其数据库单文件的特性也使得在Android中操纵数据库更加灵活,另外SQLite特有的内存数据库还会在某些特殊的情况下发挥奇妙的作用。更多有关SQLite数据库的内容,请访问SQLite官方网站:http://www.sqlite.org/。
操作步骤:
1、创建/打开SQLite 数据库
要创建或打开一个SQLite数据库,可以直接调用SQLiteDatabase的静态方法:SQLite-Database openDatabase (String path,SQLiteDatabase.CursorFactory factory,intflags),来打开文件系统中位于绝对路径path的数据库。可以给出一个CursorFactory对象factory用于查询时构造Cursor的子类对象并返回,或者传入null使用默认的factory构造。参数flags用于控制打开或创建的模式,多个模式组合用|隔开,flags可用的值均为SQLiteDatabase类中定义的整型常量。
OPEN_READONLY,以只读的方式打开数据库。
OPEN_READWRITE,以可读写的方式打开数据库。
CREATE_IF_NECESSARY,当数据库不存在时,创建数据库。
NO_LOCALIZED_COLLATORS,打开数据库时,不根据本地化语言对数据进行排序。另外,还可以调用方法SQLiteDatabase openOrCreateDatabase (String path,SQLite-Database.CursorFactory factory) , 等同于调用openDatabase(path, factory,CREATE_IF_NECESSARY)。因为创建SQLite数据库也就是在文件系统中创建一个SQLite数据库的文件,所以应用程序必须对创建数据库的目录必须有可写的权限,否则会抛出SQLite-Exception异常。
除了在文件系统中创建SQLite数据库,Android还支持SQLite内存数据库。在某些需要临时创建数据库,并且对操作速率相对要求较高的情况下,SQLite内存数据库就发挥作用了。要在内存中创建一个SQLite数据库只需要调用SQLiteDatabase的静态方法SQLiteDatabase create(SQLiteDatabase.CursorFactory factory)就可以了。若创建成功会返回创建的SQLite内存数据库的对象,否则会返回null。
2、关闭SQLite 数据库
不管用何种方式打开了数据库,获得的SQLiteDatabase对象不再使用时(如程序退出时),都要调用close()方法来关闭打开的数据库,否则会抛出IllegalState-Exception异常。
这个实验比较简单,直接Java代码贴上即可。
package com.penguin7.sqlite;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
public class SQLiteTest extends Activity {
private final String TAG = "SQLLOG";
private final String DBNAME = "test.db";
private SQLiteDatabase test = null;
private String amount = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
amount = String.valueOf(databaseList().length);
Log.d(TAG, "before database is created: "+amount);
this.test = openOrCreateDatabase(DBNAME, MODE_PRIVATE, null);
amount = String.valueOf(databaseList().length);
Log.d(TAG, "after database is created: "+amount);
}
@Override
public void onDestroy(){
super.onDestroy();
this.test.close();
deleteDatabase(DBNAME);
amount = String.valueOf(databaseList().length);
Log.d(TAG, "after the activity life is over:"+amount);
}
}
好,实际跑一下,看看有没有完成创建和关闭数据的效果。
先对LogCat做个过滤标签:
启动程序数据库从无到有:
结束程序生命周期前关闭数据库: