2011-03-11 5 views
0

지금은 조금 혼란스러워. 나는 XML 파일을 받고 그 내용을 sqlite db에 저장하려고합니다. 아주 흔한 것 같네요. 나는 기본적으로 다음과 같은안드로이드 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를 확장하는 지금 않는 DBAdapter이 {

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를 내 나는 액세스 할 수 없습니다 db 개체 DatabaseHelper 클래스에 있습니다. 이걸 어떻게 함께 가져 가야합니까?

감사합니다. A.

답변

0

생성자를 통해 파서에 db 객체를 전달할 수 있습니까?

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

당신이하고자하는 것을 달성하기위한 몇 가지 옵션이 있습니다.

  1. 당신은 단순히 당신의 HandlerXmlData 객체로의 SQLiteDatabase 객체를 전달 인스턴스 변수로 객체를 유지하고, 당신이 당신의 가치를 접근로에 삽입 할 수 있습니다.

  2. 데이터베이스 모델을 나타내는 bean을 작성할 수도 있습니다. HandlerXmlData 객체 내에서이 bean 컬렉션을 저장하는 인스턴스 변수를 가질 수 있으며 sax 이벤트를 받으면 인스턴스 변수에 추가 할 수 있습니다. 구문 분석이 완료되면 채워진 모델에 액세스하고이를 반복하여 각 항목을 데이터베이스에 삽입 할 수있는 메소드가 있어야합니다.