【问题标题】:Android - Running multiple Database InstancesAndroid - 运行多个数据库实例
【发布时间】:2014-07-07 11:36:34
【问题描述】:

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

我使用三个单独的线程来执行此操作。我不认为我有线程问题,因为在我的 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;
}

【问题讨论】:

  • 看起来答案可能是创建此数据库的全局实例?从我的发现看来,我可以打开数据库,然后修改我的所有方法并删除所有新实例和 opn、关闭 ops 以及对数据库执行的操作?

标签: android sqlite instance multiple-instances


【解决方案1】:

你可以做一件事,你必须声明 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;
}

【讨论】:

  • 这是否也适用于这个 AsyncTaskRunner 类?
猜你喜欢
  • 1970-01-01
  • 2012-04-12
  • 2013-08-20
  • 1970-01-01
  • 2018-01-29
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多