a
554325746@qq.com
2019-07-15 e6a8bdd23d6f5cb46ac650285829573280edcdf6
app/src/main/java/com/basic/security/dao/DatabaseManager.java
@@ -6,9 +6,11 @@
import android.util.Pair;
import com.basic.security.base.BaseApplication;
import com.basic.security.model.Setting;
import com.basic.security.utils.Constants;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
@@ -25,16 +27,55 @@
    public static final Lock databaseLock = new ReentrantLock();
    public static final Lock databaseExecSqlLock = new ReentrantLock();
    public static Map<String, SQLiteDatabase> databaseMap = new HashMap<>();
    public static Class[] tableClasses = new Class[] {
            Setting.class
    };
    public static SQLiteDatabase getDatabase() {
        return getDatabase(Constants.databaseName);
    }
    public static void intiTables() {
        for (Class tableClass : tableClasses) {
            String table = tableClass.getSimpleName();
            Map<String, String> columns = new HashMap<>();
            Field[] declaredFields = tableClass.getDeclaredFields();
            for (Field field : declaredFields) {
                try {
                    String fieldName = field.getName();
                    String value = (String)field.get(null);
                    if (value != null) {
                        if ("table".equals(fieldName)) {
                            table = value;
                        } else {
                            columns.put(value, value);
                        }
                    }
                } catch (Exception e) {
                    System.out.println("reflect "+e.getMessage());
                }
            }
            columns.put("id", "id");
            String createTable = "CREATE TABLE IF NOT EXISTS " + table + " (";
            for (String column : columns.keySet()) {
                createTable += column + " TEXT, ";
            }
            createTable += " PRIMARY KEY(id))";
            if (table.equals("RealTimeMetrics")) {
                createTable = createTable.replace("TEXT", "INTEGER");
                createTable = createTable.replace("id INTEGER", "id TEXT");
//                System.out.println("createTable="+createTable);
            }
            DatabaseManager.execSQL(createTable);
            String createIndex = "CREATE UNIQUE INDEX IF NOT EXISTS idx_"+table+" ON "+table+"(id)";
            DatabaseManager.execSQL(createIndex);
        }
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS alarm (\"matchPersonListStr\" TEXT, property TEXT, \"alarmLargePicture\" TEXT,\"alarmPerson\" TEXT,\"alarmPicture\" TEXT,\"alarmVideo\" TEXT,\"alarmTime\" TEXT,\"alarmAddress\" TEXT,\"alarmType\" TEXT,\"id\" TEXT, \"createTime\" TEXT, \"closeAlarm\" TEXT, \"mute\" TEXT, PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_alarm ON alarm(id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS setting (\"id\" TEXT, \"name\" TEXT, PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_setting ON setting (id)");
//        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS setting (\"id\" TEXT, \"name\" TEXT, PRIMARY KEY(id))");
//        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_setting ON setting (id)");
    }
    public static SQLiteDatabase getDatabase(String databaseName) {
@@ -42,7 +83,8 @@
        try {
            databaseLock.lock();
            if (database == null) {
                database = BaseApplication.getApplication().openOrCreateDatabase(Constants.databaseName, MODE_PRIVATE, null);
//                database = BaseApplication.getApplication().openOrCreateDatabase(Constants.databaseName, MODE_PRIVATE, null);
                database = SQLiteDatabase.openOrCreateDatabase(databaseName, null);
                databaseMap.put(databaseName, database);
                intiTables();
                setCustomDatabaseFiles(BaseApplication.getApplication());