2016-04-10 08:33:11|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:Java, Android, 数据库|来源:唯设编程网
SQLite数据库概述一文对SQLite数据库的基本知识进行了介绍,Android对SQLite提供了原生的支持,同时,在Android中使用SQLite需要遵循一些基本的流程,本文对Android中使用SQLite的典型用法进行介绍,并通过口袋英语APP的数据库实现代码对其进行阐述说明。
与其它类型应用程序不同,Android创建的数据库文件仅仅对应的程序可以访问,也就是说,你是无法访问别的应用程序创建的数据库文件的,数据库文件存放的默认目录是/data/data/<package_name>/databases,其中的<package_name>对应你应用程序的包名称。
首先创建一个DBHelper类,该类继承自SQLiteOpenHelper,用来管理Android数据库的创建和版本管理。通常,需要重载OnCreate和OnUpgrade两个方法,前一个函数在数据库创建时会被调用,后一个函数在数据库升级(即版本号增加)的时候会被调用。
DBHepler类的实现代码如下:
/**
* Created by ygh on 2016/1/24.
*/
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "main.db";
private static final int DATABASE_VERSION = 4;
private final Context mContext;
public DBHelper(Context context) {
//CursorFactory设置为null,使用默认值
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mContext = context;
}
//数据库第一次被创建时onCreate会被调用
@Override
public void onCreate(SQLiteDatabase db) {
//单词基本信息表
db.execSQL("CREATE TABLE IF NOT EXISTS `basic_info` ("
+ "`ID` INTEGER PRIMARY KEY NOT NULL," //ID,单词对应的hashCode
+ "`word` TEXT NOT NULL," //单词
+ "`accent` TEXT NOT NULL," //发音
+ "`rate` INTEGER NOT NULL," //星级
+ "`level` TEXT NOT NULL," //水平:考研、GRE
+ "`explain` TEXT NOT NULL" //解释
+ ");");
//例句表
db.execSQL("CREATE TABLE IF NOT EXISTS `sentences` ("
+ "`ID` INTEGER PRIMARY KEY NOT NULL," //ID
+ "`wordCode` INTEGER NOT NULL," //单词对应的ID
+ "`sentence` TEXT NOT NULL," //例句
+ "`source` TEXT NOT NULL" //来源
+ " );");
//生词表
db.execSQL("CREATE TABLE IF NOT EXISTS `glossary` ("
+ "`ID` INTEGER PRIMARY KEY," //ID,单词的hashCode
+ "`masterCode` INTEGER NOT NULL," //掌握程度
+ "`reviewCount` INTEGER NOT NULL," //复习次数
+ "`queryCount` INTEGER NOT NULL," //查询次数
+ "`reviewTime` TEXT NOT NULL," //查询次数
+ "`addTime` TEXT NOT NULL" //添加时间
+ ");");
//历史查询记录表
db.execSQL("CREATE TABLE IF NOT EXISTS `history` ("
+ "`ID` INTEGER PRIMARY KEY," //ID,单词的hashCode
+ "`word` INTEGER NOT NULL," //掌握程度
+ "`queryCount` INTEGER NOT NULL," //查询次数
+ "`queryTime` TEXT NOT NULL" //查询次数
+ ");");
}
//如果DATABASE_VERSION值被改为2,系统发现现有数据库版本不同,即会调用onUpgrade
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
android.util.Log.w("Constants", "Upgrading database, which will destroy all old data");
//db.execSQL("ALTER TABLE `glossary` ALTER COLUMN `queryTime` TEXT");
onCreate(db);
}
/**
* 删除数据库文件
* @return
*/
public boolean deleteDB() {
if (!FileOperateFunc.deleteFile("/data/data/com.vcsos.dic.myengdic/databases/main.db")) {
Toast.makeText(mContext, "删除数据库main.db失败", Toast.LENGTH_LONG).show();
} else
return false;
if (!FileOperateFunc.deleteFile("/data/data/com.vcsos.dic.myengdic/databases/main.db-journal")) {
Toast.makeText(mContext, "删除main.db-journal失败", Toast.LENGTH_LONG).show();
} else
return false;
return true;
}
}
在DBHepler类的OnCreate方法中实现了数据库记录表的创建,Android中SQLite的SQL语句与其它通用的SQL语句大多数地方类似。DATABASE_VERSION是我们数据库的版本号,DATABASE_NAME是数据库的文件名称,此外,我们还增加了一个deleteDB方法,用于删除数据库文件。