您的位置:首页 > 移动开发 > Android开发

Android SQLite乐学成语项目之数据库存储

2016-06-14 18:22 267 查看

一.SQLite介绍

1SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少。Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作。

3.SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象),可以对varchar,char等其他数据类型可以进行保存;SQLite有个显著的特点:可以把各种数据类型的数据保存到任何字段中,不受字段所声明的数据类型的影响。 另外,SQLite 在解析CREATE TABLE 语句时, 会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息。

二.相关的类

1.SQLiteOpenHelper:抽象类,可以通过继承该类,重写数据库创建以及更新的方法, 通过该类的对象获得数据库实例,或者关闭数据库。
2.SQLiteDatabase:数据库访问类:可以通过该类的对象来对数据库做一些增删改查的操作。
3.Cursor:游标,类似于JDBC里的resultset(结果集),可以简单理解为指向数据库中某 一个记录的指针。

三.创建数据库

为了能够更加方便的管理数据库,专门提供了SQLiteOpenHelper帮助类,借助这个类就可以非常简单的对数据库进行常和升级。
首先要知道SQLiteOpenHelper是一个抽象类,如果使用它的话,需要创建一个自己的帮助类去继承它。
SQLiteOpenHelper中的两个抽象方法是:

1.onCreate();
2.onUpgrade();
必须在自己的帮助类里重写这两个方法,然后分别在这两个方法中去实现创建和升级数据库。
SQLiteOpenHelper中两个非常重要的实例方法:
1.getReadableDatabase();
2.getWriteableDatabase();

四.程序

package com.example.happyidiom.db;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import com.example.happyidioms.R;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;

public class DBOpenHelper {

private final int BUFFER_SIZE=400000;
public static final String DB_NAME="idioms.db";
public static final String PACKAGE_NAME="com.example.happyidiom";
public static final String DB_PATH="/data" +
Environment.getDataDirectory().getAbsolutePath()+"/" +
PACKAGE_NAME+"/databases";

private Context context;

public DBOpenHelper(Context context) {
// TODO Auto-generated constructor stub
this.context=context;
}
//数据库
public SQLiteDatabase openDatabase(){
try{
File myDataPath=new File(DB_PATH);
if(!myDataPath.exists()){
myDataPath.mkdirs();//如果没有这个目录则创建
}
String dbfile=myDataPath+"/"+DB_NAME;
if(!(new File(dbfile).exists())){
InputStream is = context.getResources().openRawResource(R.raw.idioms);
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer=new byte[BUFFER_SIZE];
int count=0;
while((count=is.read(buffer))>0){
fos.write(buffer,0,count);
}
fos.close();
is.close();
}
SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(dbfile, null);
return db;
}catch(FileNotFoundException e){
Log.e("Database", "File not found");
e.printStackTrace();
}catch (IOException e) {
// TODO: handle exception
Log.e("Datebase", "IO exception");
e.printStackTrace();
}
return null;
}
编写测试程序:

package com.example.happyidiom.test;

/*数据库测试类*/

import com.example.happyidiom.db.DBOpenHelper;

import android.test.AndroidTestCase;

public class DBOpenHelperTest extends AndroidTestCase {

public void testDBOpen(){
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
dbOpenHelper.openDatabase();
}

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: