如何从不同的类管理相同的数据库? (机器人/源码)

时间:2011-12-15 18:30:18

标签: java android database sqlite

在我的Android应用程序中,我有一个类执行以下功能:
将来自XML源的数据存储到数据库中;
从数据库加载数据;
如果数据超过24小时,从xml源重写到数据库;
一切正常。

我现在正试图从另一个类向同一个数据库写一个新表。
所以我按照与第一个类相同的程序/设置,现在程序崩溃(强制关闭错误),android log cat出现以下错误:
SQL错误:msg =表“table-name”不存在
错误插入(查询)到表“table-name”(对于每次尝试的插入重复此错误)

问题是,它给我的“表名”(说它不存在)是来自第一类之前工作正常的表。

以下是一些相关代码:

public class CurrencyConverter {
public static String XML_SOURCE = "http://rss.timegenie.com/forex.gz";
public static long LAST_UPDATE=0;
private static SQLiteHelper.DatabaseAdapter dbAdapter;
private final static String TBL_NAME = "tbl_currency";
private final static String KEY_CODE = "code";
private final static String KEY_DESC = "description";
private final static String KEY_RATE = "rate";

private final static void createOrOpenDB(Context context) {
    SQLiteHelper dbHelper = new SQLiteHelper();
    TableObjectMaker tableObjs = dbHelper.new TableObjectMaker();
    tableObjs.addTable(TBL_NAME, new String[] {
             "_id integer primary key autoincrement",
             KEY_CODE + " text not null",
             KEY_DESC + " text not null",
             KEY_RATE + " real not null"
             });
    dbAdapter = dbHelper.new DatabaseAdapter(context);
    dbAdapter.open(tableObjs, "local_data", 1);
}
private final static void writeToDB(NodeList nodes) {
    if (nodes==null) return;
    List<ContentValues> content = SQLiteHelper.getContentValues(nodes,
            new String[] {KEY_CODE,KEY_DESC,KEY_RATE});
    for (ContentValues c:content) {
        dbAdapter.insertRowInTable(TBL_NAME, c);
    }
}
private final static void closeDB() {
    dbAdapter.close();
}
public static void updateDB(Context context) {
    Document xmlDocument = GZip.getResourceAsXML(XML_SOURCE,true);
    NodeList nodes = xmlDocument.getElementsByTagName("data");
    createOrOpenDB(context);
    writeToDB(nodes);
    closeDB();
    LAST_UPDATE = Calendar.getInstance().getTimeInMillis();
}
...
}  

另一个类具有与上面相同的数据库访问/写入方法,除了具有自己的表名和字段名,并且它对数据库名使用相同的“local_data”名称。 如何让两个类在同一个数据库中读取和写入自己的表?

1 个答案:

答案 0 :(得分:0)

将对数据库的所有访问权限移至ContentProvider。然后,每个类都可以与ContentProvider交互,然后ContentProvider与数据库进行交互。