diff --git a/app/src/main/java/com/supwisdom/activities/CrashHandler.kt b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
index 784aeab..48caaf3 100644
--- a/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
+++ b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.activities
 
+import android.annotation.SuppressLint
 import android.content.Context
 import android.content.pm.PackageManager
 import android.os.Build
@@ -20,6 +21,7 @@
     private val info = HashMap<String, String>()
 
     companion object {
+        @SuppressLint("StaticFieldLeak")
         private var INSTANCE: CrashHandler? = null
 
         fun getInstance(): CrashHandler {
@@ -58,7 +60,6 @@
      * @return true 如果处理了该异常信息;否则返回false.
      */
     private fun handleException(ex: Throwable?): Boolean {
-//        CommonUtil.showBar(context!!)
         ThreadPool.getShortPool().execute(Runnable {
             CommonUtil.doSleep(500)
             Looper.prepare()
diff --git a/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt b/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
index acaaa43..b66a2d1 100644
--- a/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
@@ -12,7 +12,7 @@
  **/
 class ConfigParaDao constructor(context: Context) {
     private val INDEX = "1"
-    private val TABLE = DBTransdtlHelper.TABLE_NAME_CONFIGPARA
+    private val TABLE = DBLocalHelper.TABLE_NAME_CONFIGPARA
     private val dbHelper = DBTransdtlHelper.getInstance(context)
 
     fun getLock(): Lock {
diff --git a/app/src/main/java/com/supwisdom/db/DBLocalHelper.kt b/app/src/main/java/com/supwisdom/db/DBLocalHelper.kt
new file mode 100644
index 0000000..a57dc71
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/DBLocalHelper.kt
@@ -0,0 +1,62 @@
+package com.supwisdom.db
+
+import android.content.Context
+import android.database.sqlite.SQLiteDatabase
+import android.database.sqlite.SQLiteOpenHelper
+import java.util.concurrent.locks.Lock
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/7/31
+ ** @desc 本地配置文件
+ **/
+class DBLocalHelper private constructor(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, VERSION) {
+    companion object {
+        private val DB_NAME = "db_local_config"
+        private val VERSION = 1
+        private var instance: DBLocalHelper? = null
+
+        const val TABLE_NAME_CONFIGPARA = "tb_configpara"
+
+        fun getInstance(context: Context): DBLocalHelper {
+            if (null == instance) {
+                synchronized(DBLocalHelper::class.java) {
+                    if (null == instance) {
+                        instance = DBLocalHelper(context)
+                    }
+                }
+            }
+            return instance!!
+        }
+    }
+
+    /**
+     * SQL for create table
+     */
+    private val CREATE_TABLE_NAME_CONFIGPARA = ("create table IF NOT EXISTS "
+            + TABLE_NAME_CONFIGPARA + " ( "
+            + BeanPropEnum.ConfigPara.id + " long primary key, "
+            + BeanPropEnum.ConfigPara.mode + " integer, "
+            + BeanPropEnum.ConfigPara.devphyid + " char(8), "
+            + BeanPropEnum.ConfigPara.psamno + " char(12), "
+            + BeanPropEnum.ConfigPara.epayIP + " varchar(128), "
+            + BeanPropEnum.ConfigPara.epayPort + " integer, "
+            + BeanPropEnum.ConfigPara.epayUri + " varchar(128), "
+            + BeanPropEnum.ConfigPara.managePwd + " char(6),"
+            + BeanPropEnum.ConfigPara.initOK + " integer ) ")
+    private val DROP_TABLE_NAME_CONFIGPARA = "DROP TABLE IF EXISTS $TABLE_NAME_CONFIGPARA"
+
+    private val lock = ReentrantLock()
+    fun getLock(): Lock {
+        return lock
+    }
+
+    override fun onCreate(db: SQLiteDatabase) {
+        db.execSQL(CREATE_TABLE_NAME_CONFIGPARA)
+    }
+
+    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
+        if (oldVersion < newVersion) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
index b4ecdd1..aadfb8d 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -16,7 +16,6 @@
         private val VERSION = 1
         private var instance: DBTransdtlHelper? = null
 
-        const val TABLE_NAME_CONFIGPARA = "tb_configpara"
         const val TABLE_NAME_DTL_ONLINE = "tb_dtl_online"
         const val TABLE_NAME_DTL_OFFLINE = "tb_dtl_offline"
 
@@ -35,18 +34,6 @@
     /**
      * SQL for create table
      */
-    private val CREATE_TABLE_NAME_CONFIGPARA = ("create table IF NOT EXISTS "
-            + TABLE_NAME_CONFIGPARA + " ( "
-            + BeanPropEnum.ConfigPara.id + " long primary key, "
-            + BeanPropEnum.ConfigPara.mode + " integer, "
-            + BeanPropEnum.ConfigPara.devphyid + " char(8), "
-            + BeanPropEnum.ConfigPara.psamno + " char(12), "
-            + BeanPropEnum.ConfigPara.epayIP + " varchar(128), "
-            + BeanPropEnum.ConfigPara.epayPort + " integer, "
-            + BeanPropEnum.ConfigPara.epayUri + " varchar(128), "
-            + BeanPropEnum.ConfigPara.managePwd + " char(6),"
-            + BeanPropEnum.ConfigPara.initOK + " integer ) ")
-    private val DROP_TABLE_NAME_CONFIGPARA = "DROP TABLE IF EXISTS $TABLE_NAME_CONFIGPARA"
     private val CRAETE_TABLE_NAME_DTL_ONLINE = ("create table IF NOT EXISTS "
             + TABLE_NAME_DTL_ONLINE + " ( "
             + BeanPropEnum.TransdtlOnline.devphyid + " char(8),"
@@ -90,7 +77,6 @@
     }
 
     override fun onCreate(db: SQLiteDatabase) {
-        db.execSQL(CREATE_TABLE_NAME_CONFIGPARA)
         db.execSQL(CRAETE_TABLE_NAME_DTL_ONLINE)
         db.execSQL(CRAETE_TABLE_NAME_DTL_OFFLINE)
     }
diff --git a/app/src/main/java/com/supwisdom/db/Pos.kt b/app/src/main/java/com/supwisdom/db/Pos.kt
index 5a3e1f2..d03277b 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -8,9 +8,8 @@
  ** @desc
  **/
 class Pos constructor(context: Context) {
-    private val context = context
     private val sdContext = SDContext(context)
-    private val configParaDao = ConfigParaDao(context)
+    private val configParaDao = ConfigParaDao(sdContext)
     private var cfgRecord: ConfigParaRecord? = null
     private val dynamicParaDao = DynamicParaDao(context)
     private var dyRecord: DynamicParaRecord? = null
diff --git a/app/src/main/java/com/supwisdom/db/SDContext.kt b/app/src/main/java/com/supwisdom/db/SDContext.kt
index df8b2b3..1b870a6 100644
--- a/app/src/main/java/com/supwisdom/db/SDContext.kt
+++ b/app/src/main/java/com/supwisdom/db/SDContext.kt
@@ -44,13 +44,15 @@
         name: String, mode: Int,
         factory: SQLiteDatabase.CursorFactory?
     ): SQLiteDatabase {
-        return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null)
+        val file = getDatabasePath(name) ?: return super.openOrCreateDatabase(name, mode, factory)
+        return SQLiteDatabase.openOrCreateDatabase(file, factory)
     }
 
     override fun openOrCreateDatabase(
         name: String, mode: Int,
         factory: SQLiteDatabase.CursorFactory?, errorHandler: DatabaseErrorHandler?
     ): SQLiteDatabase {
-        return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null)
+        val file = getDatabasePath(name) ?: return super.openOrCreateDatabase(name, mode, factory, errorHandler)
+        return SQLiteDatabase.openOrCreateDatabase(file, factory)
     }
 }
\ No newline at end of file
