说说Android里的SQLiteOpenHelper
来源:互联网 发布:mac qq五笔拼音输入法 编辑:程序博客网 时间:2024/06/05 11:39
从Android Developer上的定义我们知道,SQLiteOpenHelper是一个helper class, 用于管理SQLite数据库的。
Android Developer链接如下:http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
我们想要利用其管理数据库时,一般是通过新建一个类extends SQLiteOpenHelper,然后override其中的 onCreate, onUpgrade函数,再自己写数据库的读写删等函数。然而与Activity不同的是,它的onCreate函数并不是每次打开数据库的时候都会调用,也不是在新建helper对象的时候调用的,这是怎么回事呢?举个例子吧。
假如我们新建了一个类叫DatabaseHandler,extends SQLiteHelper类,部分代码如下:
public class DatabaseHandler extends SQLiteOpenHelper { private static final String DATABASE_NAME = "DATABASE"; private static final int DATABASE_VERSION = 1; //table names private String TABLE_RECORDS = "RECORDS"; //table columns private String ID; private String Time; private String Password; private Context context; public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); this.context = context; TABLE_RECORDS = context.getString(R.string.table_records); ID = context.getString(R.string.ID); Time = context.getString(R.string.Time); Password = context.getString(R.string.Password); } //create database tables @Override public void onCreate(SQLiteDatabase db) { Log.d(TAG, "database oncreate"); // password table is used to store password records String CREATE_TABLE = "CREATE TABLE " + TABLE_RECORDS + "(" + ID + " INTEGER PRIMARY KEY," + Time + " TEXT," + Password + " TEXT" + ")"; db.execSQL(CREATE_TABLE);
}
...
}
然后在一个Activity中我们建立一个DatabaseHelper的object:
//the onCreate function of some activity@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); db = new DatabaseHandler(this); }
我们会发现,DatabaseHelper的onCreate函数并没有被调用。如果这时你试图导出该数据库,将会报错ENOENT(No such file or directory),表明此时该数据库本身也是不存在的。
Google了一番发现,SQLiteOpenHelper类里的constructor并不会创建DATABASE,并且调用其constructor的时候onCreate并不会被调用。
onCreate只会在你试图打开一个刚刚建立的database时调用,而database真正建立是你第一次调用getWritableDatabase()或者getReadableDatabase()的时候。这也是为什么网上教程中对数据库的读写函数第一句都是
SQLiteDatabase db = this.getWritableDatabase();
0 0
- 说说Android里的SQLiteOpenHelper
- android SQLiteOpenHelper的使用方法
- Android-SQLiteOpenHelper的使用
- Android SQLiteOpenHelper的使用心得
- Android之SQLiteOpenHelper的使用
- Android SQLiteOpenHelper的使用心得
- 说说 Objective-C 里的 @()
- 说说 Objective-C 里的 @()
- 说说 Objective-C 里的 @()
- Android:SQLiteOpenHelper
- android:SQLiteOpenHelper
- android sqliteopenhelper
- Android-SQLiteOpenHelper
- Android SQLiteOpenHelper
- Android SQLiteOpenHelper
- android数据库编程----SqLiteOpenHelper的使用
- Android数据库编程:SqLiteOpenHelper的使用
- Android SQLiteDatabase帮助类SQLiteOpenHelper的使用
- Linux 文件系统:procfs, sysfs, debugfs 用法简介
- HTML中结构化标签的使用
- Swift开发iOS应用(1)列表的实现
- 【C语言】PCM音频数据处理---降低采样率
- Spring整合Hibernate的事务管理
- 说说Android里的SQLiteOpenHelper
- phpmyadmin登录不上,修改数据库密码
- spring事务----编程式与声明式
- 【JavaScript】JS读取XML文件并进行搜索
- iOSAPP 本地化
- [Cocoa]深入浅出 Cocoa 之消息
- 方框滤波,高斯滤波,中值滤波,双边滤波,opencv实现
- C++复习笔记——初始化列表顺序
- unity shader 固定管线实例(三) 光照 自发光混合 纹理混合