Android-运行多个数据库实例
我正在开发一个android应用程序。在那个应用程序中,我必须不断地从数据库中添加和获取数据 我使用三个单独的线程来完成此操作。我不认为我有线程问题,因为在我的DDMS中,我可以监视线程打开,但我认为,我没有掌握的是数据库实例 例如, 我有一个方法,它将构造一个文件名,该文件名由一个表的单元格中的值+另一个表中的单元格中的值组成。所以,我有一个方法,它调用另外两个方法,每个方法都有一个任务,去数据库获取那个值 问题是我不确定我应该如何创建一个实例。下面您可以看到,对于每个方法,我都创建了同一数据库的单独实例,然后关闭了该实例。 在这个AsyncTaskRunner类中,我有许多与下面相同的方法,它们执行自己的任务,但每次都为同一数据库打开不同的实例名称 这似乎是非常错误的。我可以想象,只要类打开,我就可以打开数据库的一个实例,然后在Destroy()之前不关闭它,这样所有方法都可以完成它们的任务 我能做得更好吗 这是我的代码:Android-运行多个数据库实例,android,sqlite,instance,multiple-instances,Android,Sqlite,Instance,Multiple Instances,我正在开发一个android应用程序。在那个应用程序中,我必须不断地从数据库中添加和获取数据 我使用三个单独的线程来完成此操作。我不认为我有线程问题,因为在我的DDMS中,我可以监视线程打开,但我认为,我没有掌握的是数据库实例 例如, 我有一个方法,它将构造一个文件名,该文件名由一个表的单元格中的值+另一个表中的单元格中的值组成。所以,我有一个方法,它调用另外两个方法,每个方法都有一个任务,去数据库获取那个值 问题是我不确定我应该如何创建一个实例。下面您可以看到,对于每个方法,我都创建了同一数据
public String evaluateATable(String filenamePrefix){
SQLDatabase getATableData = new SQLDatabase(mContext);
getATableData.open();
String aRowId = SQLDatabase.evalATable(filenamePrefix);
getATableData.close();
if(aRowId != null){
return aRowId;
}
return null;
}
public String evaluateLTable(String filenamePrefix){
SQLDatabase getLtabledata = new SQLDatabase(mContext);
getLtabledata.open();
String lRowId = SQLDatabase.evalLTable(filenamePrefix);
getLtabledata.close();
if(lRowId != null){
return lRowId;
}
return null;
}
您可以做一件事,您必须声明SQLDatabase并创建它的实例一次,然后在所有方法中使用它 就像下面
Public class test extends Activity {
SQLDatabase getATableData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLDatabase getATableData = new SQLDatabase(this);
}
public String evaluateATable(String filenamePrefix){
getATableData.open();
String aRowId = SQLDatabase.evalATable(filenamePrefix);
getATableData.close();
if(aRowId != null){
return aRowId;
}
return null;
}
public String evaluateLTable(String filenamePrefix){
getLtabledata.open();
String lRowId = SQLDatabase.evalLTable(filenamePrefix);
getLtabledata.close();
if(lRowId != null){
return lRowId;
}
return null;
}
看起来答案可能是创建此数据库的全局实例?从我发现的情况来看,我可以打开数据库,然后修改我的所有方法,删除所有新实例和opn,关闭ops,然后对数据库执行我将执行的操作?这是否也适用于此AsyncTaskRunner类?