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