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方法,用于删除数据库文件。