SQLite在Android中的典型用法

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>对应你应用程序的包名称。

1. 创建DBHelper类

首先创建一个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方法,用于删除数据库文件。

<123>
发表评论0条 】
网友评论(共?条评论)..
SQLite在Android中的典型用法