mirror of
https://github.com/WuKongIM/WuKongIMAndroidSDK
synced 2025-06-07 01:58:29 +00:00
207 lines
5.8 KiB
Java
Executable File
207 lines
5.8 KiB
Java
Executable File
package com.xinbida.wukongim.db;
|
|
|
|
import android.content.ContentValues;
|
|
import android.content.Context;
|
|
import android.database.Cursor;
|
|
import android.text.TextUtils;
|
|
|
|
import com.xinbida.wukongim.utils.WKLoggerUtils;
|
|
|
|
import net.sqlcipher.database.SQLiteDatabase;
|
|
import net.sqlcipher.database.SQLiteOpenHelper;
|
|
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* 2019-11-12 13:57
|
|
* 数据库辅助类
|
|
*/
|
|
public class WKDBHelper {
|
|
private DatabaseHelper mDbHelper;
|
|
private SQLiteDatabase mDb;
|
|
|
|
public SQLiteDatabase getDb() {
|
|
return mDb;
|
|
}
|
|
|
|
private volatile static WKDBHelper openHelper = null;
|
|
// 数据库版本
|
|
private final static int version = 1;
|
|
private static String myDBName;
|
|
private static String uid;
|
|
|
|
private WKDBHelper(Context ctx, String uid) {
|
|
WKDBHelper.uid = uid;
|
|
myDBName = "wk_" + uid + ".db";
|
|
|
|
try {
|
|
mDbHelper = new DatabaseHelper(ctx);
|
|
mDb = mDbHelper.getWritableDatabase(uid);
|
|
WKDBUpgrade.getInstance().onUpgrade(mDb);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 创建数据库实例
|
|
*
|
|
* @param context 上下文
|
|
* @param _uid 用户ID
|
|
* @return db
|
|
*/
|
|
public synchronized static WKDBHelper getInstance(Context context, String _uid) {
|
|
if (TextUtils.isEmpty(uid) || !uid.equals(_uid) || openHelper == null) {
|
|
synchronized (WKDBHelper.class) {
|
|
if (openHelper != null) {
|
|
openHelper.close();
|
|
openHelper = null;
|
|
}
|
|
openHelper = new WKDBHelper(context, _uid);
|
|
}
|
|
}
|
|
return openHelper;
|
|
}
|
|
|
|
public static class DatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
DatabaseHelper(Context context) {
|
|
super(context, myDBName, null, version);
|
|
//不可忽略的 进行so库加载
|
|
SQLiteDatabase.loadLibs(context);
|
|
}
|
|
|
|
@Override
|
|
public void onCreate(SQLiteDatabase db) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 关闭数据库
|
|
*/
|
|
public void close() {
|
|
try {
|
|
uid = "";
|
|
if (mDb != null) {
|
|
mDb.close();
|
|
mDb = null;
|
|
}
|
|
myDBName = "";
|
|
if (mDbHelper != null) {
|
|
mDbHelper.close();
|
|
mDbHelper = null;
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
|
|
void insertSql(String tab, ContentValues cv) {
|
|
if (mDb == null) {
|
|
return;
|
|
}
|
|
mDb.insertWithOnConflict(tab, "", cv, SQLiteDatabase.CONFLICT_REPLACE);
|
|
}
|
|
|
|
public Cursor rawQuery(String sql) {
|
|
if (mDb == null) {
|
|
return null;
|
|
}
|
|
return mDb.rawQuery(sql, null);
|
|
}
|
|
|
|
public Cursor rawQuery(String sql, Object[] selectionArgs) {
|
|
if (mDb == null) {
|
|
return null;
|
|
}
|
|
return mDb.rawQuery(sql, selectionArgs);
|
|
}
|
|
|
|
public Cursor select(String table, String selection,
|
|
String[] selectionArgs,
|
|
String orderBy) {
|
|
if (mDb == null) return null;
|
|
Cursor cursor;
|
|
try {
|
|
cursor = mDb.query(table, null, selection, selectionArgs,
|
|
null, null, orderBy);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
return cursor;
|
|
}
|
|
|
|
public long insert(String table, ContentValues cv) {
|
|
if (mDb == null) return 0;
|
|
long count = 0;
|
|
try {
|
|
count = mDb.insert(table, SQLiteDatabase.CONFLICT_REPLACE, cv);
|
|
// count = mDb.insert(table, null, cv);
|
|
} catch (Exception e) {
|
|
StringBuilder fields = new StringBuilder();
|
|
for (Map.Entry<String, Object> item : cv.valueSet()) {
|
|
if (!TextUtils.isEmpty(fields)) {
|
|
fields.append(",");
|
|
}
|
|
fields.append(item.getKey()).append(":").append(item.getValue());
|
|
}
|
|
WKLoggerUtils.getInstance().e("数据库插入异常,插入表:" + table + ",字段信息:" + fields);
|
|
e.printStackTrace();
|
|
}
|
|
return count;
|
|
}
|
|
|
|
public boolean delete(String tableName, String where, String[] whereValue) {
|
|
if (mDb == null) return false;
|
|
int count = mDb.delete(tableName, where, whereValue);
|
|
return count > 0;
|
|
}
|
|
|
|
public int update(String table, String[] updateFields,
|
|
String[] updateValues, String where, String[] whereValue) {
|
|
if (mDb == null) return 0;
|
|
ContentValues cv = new ContentValues();
|
|
for (int i = 0; i < updateFields.length; i++) {
|
|
cv.put(updateFields[i], updateValues[i]);
|
|
}
|
|
int count = 0;
|
|
try {
|
|
count = mDb.update(table, cv, where, whereValue);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
return count;
|
|
}
|
|
|
|
public boolean update(String tableName, ContentValues cv, String where,
|
|
String[] whereValue) {
|
|
if (mDb == null) return false;
|
|
boolean flag = false;
|
|
try {
|
|
flag = mDb.update(tableName, cv, where, whereValue) > 0;
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public boolean update(String tableName, String whereClause,
|
|
ContentValues args) {
|
|
if (mDb == null) return false;
|
|
boolean flag = false;
|
|
try {
|
|
flag = mDb.update(tableName, args, whereClause, null) > 0;
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
} |