Android - 运行多个数据库实例

时间:2014-07-07 11:36:35

标签: android sqlite instance multiple-instances

我正在开发一个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;
}

1 个答案:

答案 0 :(得分:1)

你可以做一件事,你必须声明SQL数据库并创建一次它的实例,然后在所有方法中使用它

就像下面的

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;
}