Android中数据持久化技术包括文件存储、SharedPreferences以及数据库存储,对于大量复杂的关系型数据,数据库无疑是最合适的选择。
SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,适合在移动设备上使用。SQLite不仅支持SQL语法,还遵循数据库的ACID事务,使得本地持久化产生了质的飞跃。
首先我们创建类继承SQliteOpenHelper抽象类,重写onCreate和onUpgrade方法实现数据库的创建和升级。
这里为了方便多线程并发访问数据库,将类设计为单例模式。
package com.sdu.runningsdu.Utils;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
import android.util.Log;
/**
* Created by FTDsm on 2018/6/4.
*/
public class DatabaseHelper extends SQLiteOpenHelper {
private static String DB_NAME = "xxx.db";
private static final int DB_VERSION = 1;
private static DatabaseHelper databaseHelper;
public DatabaseHelper(Context context, String name) {
super(context, name, null, DB_VERSION);
if(Build.VERSION.SDK_INT >= 11){
getWritableDatabase().enableWriteAheadLogging();
}
}
/**
* 单例模式
* @param context
* @param name
* @return DatabaseHelper
*/
public static synchronized DatabaseHelper getInstance(Context context, String name) {
if (databaseHelper == null) {
databaseHelper = new DatabaseHelper(context, name);
}
return databaseHelper;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String userSQL = "create table if not exists user " +
"(sid varchar(20) primary key, " +
"name varchar(255), " +
"password varchar(255), " +
"imagePath varchar(255), " +
"image blob)";
sqLiteDatabase.execSQL(userSQL);
Log.d("database", "create table user");
String friendSQL = "create table if not exists friend " +
"(sid varchar(20) primary key, " +
"name varchar(255), " +
"imagePath varchar(255), " +
"unread integer, " +
"image blob)";
sqLiteDatabase.execSQL(friendSQL);
Log.d("database", "create table friend");
String groupSQL = "create table if not exists groups " +
&