一、简介
- SQLite数据库是一直嵌入式数据库,可存储结构型、关系型数据,使用SQL语句,支持事务处理,比较独立,无需服务进程。
- SQLite数据库的具体实现一般借助SQLite数据库辅助操作类SQLiteOpenHelper,是Android1.5版本后引入的。应用程序中所有的类都可以通过名称访问所属的所有SQLite数据库,但应用程序之外则不能访问。
- SQLite数据库一般存储在 "/data/data//databases"目录中。
二、自定义数据库操作类
package com.smarthome.facepass.database.face;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class FaceSQLiteHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "facesList.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "face_table";
private static final String KEY_ID = "_id";
private static final String KEY_FACE_ID = "faceId";
private static final String KEY_FACE_TOKEN = "faceToken";
private static final String CREATE_USER_TBL = "create table if not exists " + TABLE_NAME
+ "(" + KEY_ID + " INTEGER primary key autoincrement not null,"
+ KEY_FACE_ID + " nvarchar(30),"
+ KEY_FACE_TOKEN + " nvarchar(50))";
private static FaceSQLiteHelper mFaceHelper;
private FaceSQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
/**
* 利用单例模式获取数据库帮助器的唯一实例
* @param context context
* @return 实例
*/
public static FaceSQLiteHelper getInstance(Context context) {
if (mFaceHelper == null) {
synchronized (FaceSQLiteHelper.class) {
if (mFaceHelper == null) {
mFaceHelper = new FaceSQLiteHelper(context);
}
}
}
return mFaceHelper;
}
/**
* 数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase()时调用
* @param db 数据库
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_USER_TBL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void insert(String faceId, String faceToken) {
if (faceId == null || faceToken == null) {
return;
}
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_FACE_ID, faceId);
contentValues.put(KEY_FACE_TOKEN, faceToken);
// 创建或打开可读可写数据库
SQLiteDatabase database = getWritableDatabase();
// 插入数据
database.insert(TABLE_NAME, null, contentValues);
// 关闭数据库
database.close();
}
public void deleteByToken(String faceToken) {
String where = KEY_FACE_TOKEN + " = ? ";
String[] whereArgs = new String[]{faceToken};
// 创建或打开可读可写数据库
SQLiteDatabase database = getWritableDatabase();
// 删除数据
database.delete(TABLE_NAME, where, whereArgs);
// 关闭数据库
database.close();
}
public String queryToken(String faceId) {
/* 创建或打开可读数据库 */
SQLiteDatabase database = getReadableDatabase();
if (database == null) {
return null;
}
// 查询数据
String[] columns = new String[]{KEY_ID, KEY_FACE_ID, KEY_FACE_TOKEN};
String where = KEY_FACE_ID + " = ?";
String[] selectArgs = new String[]{ faceId };
Cursor cursor = database.query(TABLE_NAME, columns, where, selectArgs, null, null, null);
if (cursor == null || cursor.getColumnCount() == 0) {
database.close();
return null;
}
String faceToken = null;
if (cursor.moveToFirst()) {
faceToken = cursor.getString(cursor.getColumnIndex(KEY_FACE_TOKEN));
}
cursor.close();
// 关闭数据库
database.close();
return faceToken;
}
public void update(String faceId, String faceToken) {
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_FACE_TOKEN, faceToken);
String where = KEY_FACE_ID + " = " + faceId;
SQLiteDatabase database = getWritableDatabase();
database.update(TABLE_NAME, contentValues, where, null);
database.close();
}
}
三、实现
FaceSQLiteHelper.getInstance(context).insert("1", "aaa");
String token = FaceSQLiteHelper.getInstance(context).queryToken("1");