0
在我的android應用程序中,我有一個類正在執行以下功能:
將來自XML源的數據存儲到數據庫中;
從數據庫加載數據;
如果數據超過24小時,則從xml源重寫到數據庫;
一切正常。如何從不同的類管理同一個數據庫? (android/sqlite)
我現在正在嘗試從另一個類寫入同一個數據庫的新表。
所以我遵循同樣的程序/建立在一流的,現在程序崩潰(強制關閉誤差)和Android日誌貓提供了以下錯誤:
SQL錯誤:味精=表「表 - 命名」不存在
錯誤插入(查詢)爲表‘表名’(重複這個錯誤每個插入未遂)
的問題是,在‘表名’它給了我(說它不存在)是以前罰款的第一類表格。
下面是一些相關的代碼:
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」名稱數據庫名稱。 如何讓兩個類都可以在同一個數據庫中讀寫自己的表?
嗨特德,我看到ContentProvider是一種允許其他應用程序使用同一個數據庫的方法,但是如果我只從同一個應用程序中的不同類訪問數據庫,ContentProvider仍然是必需的嗎? – Ozzy 2011-12-15 18:52:46