我正在为我的android应用程序使用SOA架构。我在后台连续运行一项服务(每隔1分钟),从我的MYSQL数据库中提取数据并将其与我的SQLite数据库(如果在2个数据库中有任何更改)进行同步。SQlite:数据库被锁定错误
现在,当服务在后台运行时,它会打开SQLite。同时,如果我正在处理(使用)应用程序,它也会尝试打开Sqlite来获取数据。在这种情况下,我得到一个错误,称为:数据库锁定在android.database.SQLiteOpenHelper.getReadableDatabase。
任何人都可以请建议我在这种情况下可以做些什么?
根据你的建议,我已经用这种方式创建了DatabaseHelper(它是包装类)的单个实例: private static DatabaseHelper instance; public static synchronized DatabaseHelper getHelper(Context context) if(instance == null) instance = new DatabaseHelper(context); return instance; } 现在,每当我需要使用DatabaseHelper的方法我称他们为follws: \t \t DatabaseHelper分贝= DatabaseHelper.getHelper(本); \t BaseObject bObj = db.GetObjectFromDB(“GlobalObject1”); – Neha
现在这个GetObjectFromDB是一个来自DatabaseHelper的方法。这个方法从Sqlite数据库读取数据。为此,我需要访问数据库,并以此方式执行此操作: \t SQLiteDatabase db = this.getReadableDatabase(); 如前所述,我的应用程序运行很多线程。当我的一个线程访问数据库时,另一个线程也尝试使用相同的方法GetObjectFromDB访问数据库。 我的问题是,getReadableDatabase()总是打开一个新的数据库连接。我怎样才能克服这个问题。 谢谢,Neha – Neha
大家好,我得到了我的问题的答案。我做了一个DataBasehelper(它是一个包装类)的静态实例和SQLiteDatabase的静态实例:private static DatabaseHelper instance; private static SQLiteDatabase sqlitedb = null; public synchronized SQLiteDatabase getHelper() if(sqlitedb == null) sqlitedb = this.getWritableDatabase();如果(sqlitedb == null) sqlitedb = this.getWritableDatabase(); } else if(sqlitedb.isOpen()== false) sqlitedb = this.getWritableDatabase(); } return sqlitedb; }现在我按如下方式调用数据库:SQLiteDatabase db = this.getHelper(); – Neha