【玩转SQLite系列】(二)SQLite创建和打开数据库的三种方式
【玩转SQLite系列】(二)SQLite创建和打开数据库的三种方式
第一种方式:继承SQLiteOpenHelper打开或创建数据库
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);
}
/** * 查看手机中由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);
}
}
可以看出info.db数据库文件已经成功创建。 第二种方式:Context.openOrCreateDatabase打开或创建数据库
/** * 第二种方式: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);
}
第三种方式:SQLiteDatabase.openOrCreateDatabase打开或创建数据库
/** * 第三种方式: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);
}
最后我们通过查阅源码发现,其实继承SQLiteOpenHelper和Context.openOrCreateDatabase最后都是会调用SQLiteDatabase.openOrCreateDatabase去实现对数据库的操作。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- CLLocation distanceFromLocation(在Swift?中)
- ruby-on-rails – Phusion Passenger在使用rvm升
- c# – “Core”作为成员名称后缀的含义
- Dojo学习笔记(9. dojo.graphics.color & doj
- .NET Core / C# 开发 IOT 嵌入式设备的个人见解
- api接口中ajax数据请求与数据返回的小坑
- vue项目中jsonp跨域获取qq音乐首页推荐问题
- c# – Console.Writeline工作在x86但不是x64
- ajax VS websocket
- c – 如何调试链接器错误?静态链接ICU时获取未定