Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
androidsqlite和SaxParser_Android_Sqlite_Saxparser - Fatal编程技术网

androidsqlite和SaxParser

androidsqlite和SaxParser,android,sqlite,saxparser,Android,Sqlite,Saxparser,现在我有点困惑。我收到一个XML文件,并希望将该内容存储在sqlite数据库中。我想这听起来很普遍。我有一个DBAdapter,它基本上执行以下操作 private static class DatabaseHelper extends SQLiteOpenHelper { private final Context ctx; DatabaseHelper(Context context) { super(context, Constants.DB

现在我有点困惑。我收到一个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 {

因此,在我的SAXParser中,我无法访问DatabaseHelper类中的db对象。如何将这些对象组合在一起


谢谢,A.

你有两个选择来实现你想要做的事情

  • 只需将SQLiteDatabase对象传入HandlerXmlData对象,将该对象作为实例变量保留,并在接近值时插入

  • 您还可以创建一个表示数据库模型的bean。在HandlerXmlData对象中,您可以有一个实例变量存储此bean的集合,并在接收sax事件时将其添加到其中。解析完成后,您应该有一个方法,可以从中访问填充的模型,对其进行迭代并插入e数据库中的每个条目


  • 可以通过构造函数将db对象传递给解析器吗

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