今天遇到一个问题,在当两个线程操作sqlite的时候,这时候如果其中一个线程将sqlite关闭,另一个线程还在操作数据库的话,就会报异常
attempt to re-open an already-closed object
为了解决这个BUG的出现 写了一个操作Help类:
package com.xcode.xandrdb.sqlite;
import com.xcode.xandrdb.Factory.SessionFactory;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DatabaseHelper
{
private static int count = 0;
private SQLiteDatabase sqLiteDatabase = null;
private boolean isclosed = false;
private DatabaseHelper(Context context)
{
count ++;
sqLiteDatabase = context.openOrCreateDatabase(SessionFactory.getConfig().DB_Name, Context.MODE_PRIVATE, null);
}
public synchronized static DatabaseHelper getInstance(Context context)
{
return new DatabaseHelper(context);
}
public void execSQL(String sql)
{
sqLiteDatabase.execSQL(sql);
}
public Cursor rawQuery(String sql)
{
return sqLiteDatabase.rawQuery(sql, null);
}
public synchronized void close()
{
if(isclosed)
{
return;
}
isclosed = true;
if(sqLiteDatabase != null && count > 0 && (--count == 0))
{
sqLiteDatabase.close();
}
}
}