SQLiteOpenHelper

在开发SQLite的过程中为了新建一张数据表,因为数据库不允许同名的数据表存在,所以建表前我们要先判断该表是否存在(见:http://blog.csdn.net/demonliuhui/article/details/66974609)这种处理方式是十分繁琐的。所以Android提供了SQLiteOpenHelper类来优雅的处理这种问题。
实际项目中很少直接用SQliteDatabase的方法操作数据库,都会集成SQLiteOpenHelper开发子类,并通过getReadableDatabase(),getWriteableDatabase()方法打开数据库。

基本用法

在该类的构造器中,调用Context中的方法创建并打开一个指定名称的数据库对象。继承和扩展SQLiteOpenHelper类主要做的工作就是重写以下两个方法。

onCreate(SQLiteDatabase db)

当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行。如果数据库不存在,会自动铁观音生成一个,然后再调用onCreate()方法,onCreate()方法在初次调用时才会被调用。重写onCreate()方法时,生成数据表结构,初始化数据。

onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version)

当打开数据库时传入的版本号与当前的版本号不同时会调用该方法。只要某次创建SQLiteOpenHelper是指定的版本号高于之前的版本,会自动出触发该方法,更新表结构

getWritableDatabase(),getReadableDatabase()

getWritableDatabase()以写的方式打开数据库,注意:一旦数据库的磁盘空间满了,数据库就只能读不能写,使用该方法就会出错。而getReadableDatabase()方法先以读写的方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续以只读的方法打开。

代码示例

继承SQLiteOpenHelper

该工具类主要是管理数据库的初始化,并允许该应用程序通过该工具类获取SQliteDatabase对象,注意的是该类无论获取多少次对象,都是同一个相同的对象。同理调用getWritableDatabase(),getReadableDatabase()的也是相同的实例。获取该对象后,就可以利用其操作数据库了。

public class MyDBHelper extends SQLiteOpenHelper {    public MyDBHelper(Context context, String name, int version) {        super(context, name, null, version);    }    @Override    public void onCreate(SQLiteDatabase db) {        //重写,新建数据表        db.execSQL("create table dict(_id integer primary key autoincrement, word , detail)");    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        Log.i("--------", oldVersion + "------->" + newVersion);    }   //针对该数据表插入方法的封装    public static void insertData(SQLiteDatabase db, String[] agres) {        db.execSQL("insert into dict values(null,?,?)", agres);    }  //针对该数据表查询方法的封装    public static Cursor queryData(SQLiteDatabase db, String key) {        Cursor cursor = db.rawQuery("select * from dict where word like ? or detail like ?", new String[]{"%" + key + "%", "%" + key + "%"});        return cursor;    }}

获取SQLiteOpenHelper对象

       MyDBHelper myDBHelper;      //创建对象,指定版本为1,使用相对路径即可,程序会自动保存在数据文件的database目录下        myDBHelper = new MyDBHelper(this, "myDict.db3", 1);         myDBHelper.getReadableDatabase();//获取操作实例

Demo

http://download.csdn.net/detail/demonliuhui/9796649

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. LruCache源码解析
  3. RxJava 学习笔记(四)
  4. android-----AsyncTask源码分析
  5. ANDROID STUDIO&&Eclipse Android项目缺少R文件解决方法(完解)
  6. 浅谈Android(安卓)java层ServiceManager
  7. android中WebView的Java与JavaScript交互
  8. Android中插件化的简单实现:启动未注册的Activity
  9. 《第一行代码》 6.3 SharedPreferences存储

随机推荐

  1. handle.post 跳到主线程中执行
  2. Android(安卓)电视退出程序Animation
  3. linphone整体结构
  4. [Android] Bitmap用法总结
  5. 编译android4.0出现jdk版本问题
  6. Android(安卓)ListView实现方法三(自定义
  7. Android(安卓)AlertDialog 绝对位置计算
  8. Andrdoid Sensors Overview (探测器概述)
  9. android NFC读卡demo 适用于M1,
  10. android蓝牙主动发起配对实例