Android(安卓)SQLiteOpenHelper的使用
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
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- LruCache源码解析
- RxJava 学习笔记(四)
- android-----AsyncTask源码分析
- ANDROID STUDIO&&Eclipse Android项目缺少R文件解决方法(完解)
- 浅谈Android(安卓)java层ServiceManager
- android中WebView的Java与JavaScript交互
- Android中插件化的简单实现:启动未注册的Activity
- 《第一行代码》 6.3 SharedPreferences存储