Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-运行多个数据库实例_Android_Sqlite_Instance_Multiple Instances - Fatal编程技术网

Android-运行多个数据库实例

Android-运行多个数据库实例,android,sqlite,instance,multiple-instances,Android,Sqlite,Instance,Multiple Instances,我正在开发一个android应用程序。在那个应用程序中,我必须不断地从数据库中添加和获取数据 我使用三个单独的线程来完成此操作。我不认为我有线程问题,因为在我的DDMS中,我可以监视线程打开,但我认为,我没有掌握的是数据库实例 例如, 我有一个方法,它将构造一个文件名,该文件名由一个表的单元格中的值+另一个表中的单元格中的值组成。所以,我有一个方法,它调用另外两个方法,每个方法都有一个任务,去数据库获取那个值 问题是我不确定我应该如何创建一个实例。下面您可以看到,对于每个方法,我都创建了同一数据

我正在开发一个android应用程序。在那个应用程序中,我必须不断地从数据库中添加和获取数据

我使用三个单独的线程来完成此操作。我不认为我有线程问题,因为在我的DDMS中,我可以监视线程打开,但我认为,我没有掌握的是数据库实例

例如,

我有一个方法,它将构造一个文件名,该文件名由一个表的单元格中的值+另一个表中的单元格中的值组成。所以,我有一个方法,它调用另外两个方法,每个方法都有一个任务,去数据库获取那个值

问题是我不确定我应该如何创建一个实例。下面您可以看到,对于每个方法,我都创建了同一数据库的单独实例,然后关闭了该实例。 在这个AsyncTaskRunner类中,我有许多与下面相同的方法,它们执行自己的任务,但每次都为同一数据库打开不同的实例名称

这似乎是非常错误的。我可以想象,只要类打开,我就可以打开数据库的一个实例,然后在Destroy()之前不关闭它,这样所有方法都可以完成它们的任务

我能做得更好吗

这是我的代码:

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类?