2011-12-15 70 views
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」名稱數據庫名稱。 如何讓兩個類都可以在同一個數據庫中讀寫自己的表?

回答

0

將對數據庫的所有訪問權移動到ContentProvider。然後每個類都可以與ContentProvider進行交互,然後與數據庫交互。

+0

嗨特德,我看到ContentProvider是一種允許其他應用程序使用同一個數據庫的方法,但是如果我只從同一個應用程序中的不同類訪問數據庫,ContentProvider仍然是必需的嗎? – Ozzy 2011-12-15 18:52:46

相關問題