2011-03-11 50 views
0

此刻我有點困惑。我收到一個XML文件並希望將該內容存儲在sqlite數據庫中。聽起來很普遍,我猜。我將對DBAdapter基本上做以下Android sqlite和SaxParser

private static class DatabaseHelper extends SQLiteOpenHelper 
{ 
    private final Context ctx; 

    DatabaseHelper(Context context) 
    { 
     super(context, Constants.DB_NAME, null, Constants.DB_VERSION); 
     this.ctx = context; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     db.execSQL("create table mytable (_id integer primary key autoincrement, field text not null, field2 text not null);"); 
     fillDb(db); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
    //not relevant here so skip it 
    } 

    private void fillDb(SQLiteDatabase db) 
    { 
     InputStream rawInput = this.ctx.getResources().openRawResource(R.raw.data); 

     SAXParserFactory factory = SAXParserFactory.newInstance(); 
     try 
     { 
      SAXParser saxParser = factory.newSAXParser(); 
      saxParser.parse(rawInput, new HandlerXmlData()); 
     } 
     catch(Exception e) 
     { 
     //not relevant here so skip it    
     } 


    //this manual entries would work here 
     //ContentValues values = new ContentValues(); 
     //values.put("field", "aaa"); 
     //values.put("field2", "bbb"); 
     //db.insert("mytable", null, values); 
       } 

的問題是,現在我的SAXParser內

公共類HandlerXmlData擴展了DefaultHandler {

private String currentValue = ""; 

public void startDocument() 
{ 

} 

public void startElement(String namespaceURI, String localName, String qName, Attributes atts) 
{ 
} 

public void characters(char[] ch, int start, int length) 
{ 
    currentValue = new String(ch, start, length); 
    //here I get the value from my XML 
       //so I need something like db.insert(...) 
} 

public void endElement(String uri, String localName, String qName) 
{ 

} 

所以我的SAXParser內我無法訪問數據庫對象我有我的DatabaseHelper類。我怎麼把這些放在一起?

感謝,A

回答

0

您可以通過構造函數將db對象傳遞給解析器嗎?

public HandlerXmlData(SQLiteDatabase db){ 
    this.db = db; 
} 
0

你有幾個選項,以達到你正在嘗試做的。

  1. 你可以簡單地通過在SQLiteDatabase對象插入到HandlerXmlData對象,保持對象實例變量,並插入到它,當你接近你的價值觀。

  2. 您也可以創建一個代表您的數據庫模型的bean。在你的HandlerXmlData對象中,你可以有一個實例變量存儲這個bean的集合,並在你接收到sax事件時添加它。解析完成後,您應該有一個方法,您可以通過該方法訪問填充的模型,迭代它並將每個條目插入到數據庫中。