package com.basic.security.manager;
|
|
import android.content.Context;
|
import android.database.sqlite.SQLiteDatabase;
|
import android.util.Pair;
|
|
import com.basic.security.utils.Constants;
|
|
import java.io.File;
|
import java.lang.reflect.Method;
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.ReentrantLock;
|
|
public class DatabaseManager {
|
public static final Lock databaseLock = new ReentrantLock();
|
public static final Lock databaseExecSqlLock = new ReentrantLock();
|
public static Map<String, SQLiteDatabase> databaseMap = new HashMap<>();
|
static boolean setCustomDatabaseFiles = false;
|
|
public static SQLiteDatabase getDatabase() {
|
return getDatabase(Constants.baseDatabasePath);
|
}
|
|
public static SQLiteDatabase getDatabase(String databaseName) {
|
SQLiteDatabase database = databaseMap.get(databaseName);
|
try {
|
databaseLock.lock();
|
if (database == null) {
|
database = SQLiteDatabase.openOrCreateDatabase(databaseName, null);
|
databaseMap.put(databaseName, database);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
databaseLock.unlock();
|
}
|
return database;
|
}
|
|
public static void execSQL(String sql) {
|
try {
|
databaseExecSqlLock.lock();
|
getDatabase().execSQL(sql);
|
} finally {
|
databaseExecSqlLock.unlock();
|
}
|
}
|
|
public static void setCustomDatabaseFiles(Context context) {
|
if (setCustomDatabaseFiles) {
|
return;
|
}
|
setCustomDatabaseFiles = true;
|
try {
|
Class<?> debugDB = Class.forName("com.amitshekhar.DebugDB");
|
Class[] argTypes = new Class[]{HashMap.class};
|
Method setCustomDatabaseFiles = debugDB.getMethod("setCustomDatabaseFiles", argTypes);
|
HashMap<String, Pair<File, String>> customDatabaseFiles = new HashMap<>();
|
customDatabaseFiles.put("xxbase_database", new Pair<>(new File(Constants.baseDatabasePath), ""));
|
// customDatabaseFiles.put("sync_database", new Pair<>(new File(Constants.syncDatabasePath), ""));
|
// customDatabaseFiles.put("cache_database", new Pair<>(new File(Constants.cacheDatabasePath), ""));
|
setCustomDatabaseFiles.invoke(null, customDatabaseFiles);
|
} catch (Exception ignore) {
|
ignore.printStackTrace();
|
}
|
}
|
}
|