首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android sqlite和SaxParser

Android sqlite和SaxParser
EN

Stack Overflow用户
提问于 2011-03-12 00:29:31
回答 2查看 429关注 0票数 0

目前我有点困惑。我收到一个XML文件,并希望将该内容存储在sqlite db中。我想这听起来很普通。我有一个DBAdapter,它基本上执行以下操作

代码语言:javascript
复制
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 {

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-12 01:19:58

你能通过构造函数把db对象传递给解析器吗?

代码语言:javascript
复制
public HandlerXmlData(SQLiteDatabase db){
    this.db = db;
}
票数 0
EN

Stack Overflow用户

发布于 2011-03-12 01:18:33

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

  1. 您可以简单地将SQLiteDatabase对象传递到HandlerXmlData对象中,将该对象作为实例变量保留,并在接近您的值时插入其中。
  2. 您还可以创建一个表示数据库模型的bean。在HandlerXmlData对象中,可以有一个实例变量来存储此bean的集合,并在接收sax事件时添加到该变量中。解析完成后,您应该有了一个方法,您可以从中访问填充的模型,对其进行迭代,并将每个条目插入到数据库中。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5275558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档