赞
踩
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53234396
本文出自【DylanAndroid的博客】
在上一篇 【玩转SQLite系列】(一)初识SQLite,重拾sql语句 中已经简单了解了下SQLite,不了解的可以去看一下。
我们发现,在Android中使用SQLite数据库的时候,创建和打开数据库的时候不止继承SQLiteOpenHelper
这一种方式。目前我至少发现了三种方式:1.自定义一个类继承SQLiteOpenHelper;
2.使用Context.openOrCreateDatabase();
3.SQLiteDatabase.openOrCreateDatabase();
那么这三种方式到底有什么不同?
特点:可以在升级数据库版本的时候在回调函数里面做相应的操作
package cn.bluemobi.dylan.sqlite;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.util.logging.Logger;
/**
* Android操作使用SQLite的帮助类
* Created by dylan on 2016-11-19.
*/
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
private final String TAG = "MySQLiteOpenHelper";
/**
* 构造函数
* 一般用于在这里创建数据库,指定表名和版本号等
*
* @param context 上下文对象
* @param name 数据库名称
* @param factory 游标工程
* @param version 数据版本号 >=1
*/
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
Log.d(TAG, "MySQLiteOpenHelper");
}
/**
* 创建数据库时调用
* <p>
* 一般用于在创建数据表
*
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate");
}
/**
* 数据库升级更新时调用
*
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(TAG, "onUpgrade");
}
}
/**
* 第一种方式:继承SQLiteOpenHelper打开或创建数据库
* 特点:可以在升级数据库版本的时候在回调函数里面做相应的操作
*
* @param v
*/
public void sQLiteOpenHelper(View v) {
/**指定数据库的表名为info.db,版本号为1**/
MySQLiteOpenHelper mySQLiteOpenHelper = new MySQLiteOpenHelper(this, Contacts.DATABASE_NAME, null, Contacts.DATABASE_VERSION);
/**得到一个可写的数据库SQLiteDatabase对象**/
SQLiteDatabase sqLiteDatabase = mySQLiteOpenHelper.getWritableDatabase();
/**查看改对象做添加的数据库**/
showDataBase(sqLiteDatabase);
}
由于我用的是真机测试,而且没有Root,所以暂时采用这种方式去查看数据库文件是否创建成功
/**
* 查看手机中由SQLiteDatabase创建的的数据库文件
*/
public void showDataBase(SQLiteDatabase sqLiteDatabase) {
List<Pair<String, String>> ll = sqLiteDatabase.getAttachedDbs();
for (int i = 0; i < ll.size(); i++) {
Pair<String, String> p = ll.get(i);
Log.d(Contacts.TAG, p.first + "=" + p.second);
}
}
4.打印结果
11-19 20:58:51.845 3422-3422/cn.bluemobi.dylan.sqlite D/SQLite: main=/data/data/cn.bluemobi.dylan.sqlite/databases/info.db
可以看出info.db数据库文件已经成功创建。
特点:可以指定数据库文件的操作模式
/**
* 第二种方式:Context.openOrCreateDatabase打开或创建数据库
* 特点:可以指定数据库文件的操作模式
*
* @param v
*/
public void context(View v) {
/**指定数据库的名称为info2.db,并指定数据文件的操作模式为MODE_PRIVATE**/
SQLiteDatabase sqLiteDatabase = this.openOrCreateDatabase(Contacts.DATABASE_NAME2, MODE_PRIVATE, null);
/**查看改对象所创建的数据库**/
showDataBase(sqLiteDatabase);
}
查看数据库文件是否创建成功
11-19 21:08:30.732 3422-3422/cn.bluemobi.dylan.sqlite D/SQLite: main=/data/data/cn.bluemobi.dylan.sqlite/databases/info2.db
特点:可以指定数据库文件的路径
/**
* 第三种方式:SQLiteDatabase.openOrCreateDatabase打开或创建数据库
* 特点:可以指定数据库文件的路径
*
* @param v
*/
public void sQLiteDatabase(View v) {
File dataBaseFile = new File(Environment.getExternalStorageDirectory() + "/sqlite", Contacts.DATABASE_NAME3);
if (!dataBaseFile.getParentFile().exists()) {
dataBaseFile.mkdirs();
}
SQLiteDatabase sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(dataBaseFile, null);
showDataBase(sqLiteDatabase);
}
查看数据库文件是否创建成功
11-19 21:09:32.767 3422-3422/cn.bluemobi.dylan.sqlite D/SQLite: main=/storage/emulated/0/sqlite/info3.db
最后我们通过查阅源码发现,其实继承SQLiteOpenHelper和Context.openOrCreateDatabase最后都是会调用SQLiteDatabase.openOrCreateDatabase去实现对数据库的操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。