1.概览
1.sqlite依赖于继承SQLiteOpenHelper类,对onCreate()和onUpgrade()的重写,onCreate()会在检测到在数据库未创建的时候才调用去该接口创建, SQLiteOpenHelper构造时需传入一个int version变量,该变量改变的时候就会调用onUpgrade()进行重新升级.
2.正文
2.1 sqlite的创建和初始化
public class DBHelper extends SQLiteOpenHelper {
Context mcontext;
private static String createTaskName="create table task_name(" +
"id integer primary key autoincrement," +
"name varchar(16))";
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.mcontext=context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(createTaskName);
Toast.makeText(mcontext,"task_name数据库已更新",Toast.LENGTH_SHORT).show();
Log.i("info:", "task_name数据库已创建");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists task_name");
onCreate(db);
Log.i("info:", "task_time_info数据库已创建");
Toast.makeText(mcontext,"数据库已更新",Toast.LENGTH_SHORT).show();
}
}
可见上文,创建了一个task_name的表, 在类DBHelper的构造函数中可以看到传入了一个version, 这是用来做当前数据库版本管理的,onCreate()会在检测到在数据库未创建的时候才调用去该接口创建, SQLiteOpenHelper构造时需传入一个int version变量,该变量改变的时候就会调用onUpgrade()进行重新升级.,该变量改变的时候就会调用onUpgrade()进行删表重新创建
2.2 sqlite的CURD的使用
上面介绍完了数据库的创建与更新,下面的例子演示如何实际使用
public class DBOperatorHelper {
public String dbName = "TimeMaster.db";
public int dbVersion = 5;
public DBHelper dbHelper;
public SQLiteDatabase db;
DBOperatorHelper(Context context){
dbHelper = new DBHelper(context, dbName, null, dbVersion);
db = dbHelper.getWritableDatabase();
}
void deleteTaskName(){
db.delete("task_name", "id=? and name=?", new String[]{"1", "study"});
}
void showAllTaskName(){
Cursor cursor = db.query("task_name", null, "name = ?", new String[]{task_name},
null, null, null, null);
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
Sting name = cursor.getString(cursor.getColumnIndex("name"))
Log.i("info:", "name is "+ name);
}
}
void insertTaskName(){
ContentValues values = new ContentValues();
values.put("name", "study");
db.insert("task_name", null, values);
}
void updateTaskName(){
ContentValues values = new ContentValues();
values.put("name", "play");
db.update("task_name", values, "id != ? and name =?", new String[]{"1", "study"});
}
此处创建了一个TimeMaster.db的数据库,version设置为5 ;
所有的数据库操作都依赖于SQLiteDatabase db对象,insert和updata都依赖于一个ContentValues 类型的对象,其是用来构建键值对去做update或者insert的,而select依赖于一个Cursor对象,其返回了查询的所有内容,能通过getColumnIndex("name")获取name所在的列的index, 然后通过getString或者getInt等各种方法去读取该列的值