在我的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”名称。 如何让两个类在同一个数据库中读取和写入自己的表?
答案 0 :(得分:0)
将对数据库的所有访问权限移至ContentProvider。然后,每个类都可以与ContentProvider交互,然后ContentProvider与数据库进行交互。