我正在使用Ormlite将我的数据库用于我的Android应用程序。我现在已经被要求创建一个容器来容纳多个数据库。我不知道我需要多少个数据库,因为容器的数据库数量是动态的。我已经查看了ormlite的多个数据库代码,但是如果您知道手头有多少个数据库,那么每个数据库创建一个类。我没有这方面的信息。所以问题是,如何创建一个带有ormlite的DatabaseHelper类来处理多个不同的数据库并且仍然是线程安全的?所有数据库都拥有完全相同类型的数据,每个容器只有不同的数据。
DatabaseHelper代码:
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final int DATABASE_VERSION = 1;
private Dao<MyData, Integer> myDataDao;
private static final AtomicInteger usageCounter = new AtomicInteger(0);
private volatile static DatabaseHelper helper = null;
public DatabaseHelper(Context context, String dynamicDBName)
{
super(context, dynamicDBName, null, DATABASE_VERSION);
}
public static DatabaseHelper getHelper(Context context, String dynamicDBName)
{
if (helper == null)
{
synchronized (DatabaseHelper.class)
{
// double check lock to prevent method from being synchronized
// requiring sync lock only being used once
if (helper == null)
helper = new DatabaseHelper(context, dynamicDBName);
}
}
usageCounter.incrementAndGet();
return helper;
}
@Override
public void close()
{
if (usageCounter.decrementAndGet() == 0)
{
super.close();
helper = null;
}
}
}