0

現時点では少し混乱しています。XMLファイルを受け取り、そのコンテンツをsqliteデータベースに保存したいと思います。非常に一般的に聞こえると思います。私は基本的に次のことを行うDBAdapterを持っています

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クラスにあるdbオブジェクトにアクセスできません。これらをまとめるにはどうすればよいですか?

ありがとう、A。

4

2 に答える 2

0

あなたがやろうとしていることを達成するためのいくつかのオプションがあります。

  1. SQLiteDatabaseオブジェクトをHandlerXmlDataオブジェクトに渡し、オブジェクトをインスタンス変数として保持し、値に近づくにつれてオブジェクトに挿入するだけです。

  2. データベースモデルを表すBeanを作成することもできます。HandlerXmlDataオブジェクト内に、このBeanのコレクションを格納するインスタンス変数を作成し、saxイベントを受信したときにそれに追加することができます。解析が完了すると、入力されたモデルにアクセスし、モデルを反復処理して、各エントリをデータベースに挿入できるメソッドが必要になります。

于 2011-03-11T17:18:33.050 に答える
0

コンストラクターを介してdbオブジェクトをパーサーに渡すことはできますか?

public HandlerXmlData(SQLiteDatabase db){
    this.db = db;
}
于 2011-03-11T17:19:57.633 に答える