2011-08-17 54 views
1

我正在制作一个Android应用程序,它从XML文件获取其信息。 由于查询的强大功能,我正在填充数据库中的信息,以便在程序运行时更轻松地访问。在交易中使用多种方法

然而,它引起了我的注意,使用事务大大提高了速度,所以很自然地,我想要使用它。

我的问题是以下tho; 在抽象思想中,在解析主体一个的所有信息之后,信息被发送到正确的实体(类),并且在该实体内部有一种将其添加到数据库中的方法。之后,它返回到继续阅读下一个主题的解析器,该主题又将发送到右侧(可能不同)的类。

这是用switch语句实现的,每个case指向一个不同的类构造函数。

如果我想使用事务的速度,我需要在解析之前就开始一个事务,通过解析和查询构建(据我所知,所有在事务中构建的查询,最后全部作为一堆执行),然后在解析完整个文件后结束事务。

为了使这一点更清晰,或更快的阅读;代码的想法是;

Class parser(){ 
    database.beginTransaction(); 
    try{ 
     // start parsing in a whole different class, which also points to SQL queries (in different classes again) in the entitys with a switch 
     }catch(Exception e){ 
    database.endTransaction(); 
     } 
     database.endTransaction(); 
} 

我希望我明确提出了我的问题。

亲切的问候,

回答

1

是的,你有一般的想法。但是,当您完成分析时,您需要小心地标记事务成功,并且确保事务始终关闭,即使发生异常也是如此。从the docs

例子:

db.beginTransaction(); 
try { 
    // do all the parsing in here 
    ... 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 
+0

嗨格雷厄姆Borland公司, 感谢您的快速回复。 我的问题的核心是如果开始一个没有问题,让我们说'一般事务'在某处,并且在事务之间有很多代码。大多数发现的例子只是简单地启动一个事务,然后立即执行一个查询或者通过某个事件的最大循环,然后执行查询。 –

+0

每个示例使用夸张。问题是,每个例子只是创建一个只创建和填充数据库的程序。 我*可以*在主方法中启动一个事务,在该事务保持打开状态时运行整个程序的剩余部分,然后当所有事情都完成时,成功并结束事务,最后执行程序中构建的所有查询一旦。 我明白,这当然是夸大,不想要的。 –

+0

在长时间运行的XML解析操作期间,事务处于打开状态没有任何问题。它提供了很多好处,包括速度,正如你自己注意到的那样。 –