From e6a8bdd23d6f5cb46ac650285829573280edcdf6 Mon Sep 17 00:00:00 2001 From: 554325746@qq.com <554325746@qq.com> Date: 星期一, 15 七月 2019 16:51:11 +0800 Subject: [PATCH] a --- app/src/main/java/com/basic/security/dao/DatabaseManager.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 46 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/basic/security/dao/DatabaseManager.java b/app/src/main/java/com/basic/security/dao/DatabaseManager.java index bf9cb8f..918d5cd 100644 --- a/app/src/main/java/com/basic/security/dao/DatabaseManager.java +++ b/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()); -- Gitblit v1.8.0