我尝试在Blackberry上使用SQLite时遇到了很多障碍。现在我已经达到了一切似乎工作正常的程度,我正在寻找加快查询速度的方法。
有时我的应用程序会从Web服务调用中检索大量数据,这些数据会被解析并存储到我的数据库中。正在进行大量的DELETE,INSERT和UPDATE。数据库调用似乎需要花费很多时间。
我想知道处理SQLite时的一些最佳实践。特别是在Blackberry平台上具有相关经验的人。任何加速DELETE或INSERT等的技巧......
良好教程的链接会很棒。或者一些有用代码的片段甚至更好。
提前致谢。
编辑:
以下是Blackberry使用交易的一些示例代码。
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.database.*;
import net.rim.device.api.io.*;
public class UsingTransactions extends UiApplication
{
public static void main(String[] args)
{
UsingTransactions theApp = new UsingTransactions();
theApp.enterEventDispatcher();
}
public UsingTransactions()
{
}
}
class UsingTransactionsScreen extends MainScreen
{
Database d;
public UsingTransactionsScreen()
{
LabelField title = new LabelField("SQLite Using Transactions Sample",
LabelField.ELLIPSIS |
LabelField.USE_ALL_WIDTH);
setTitle(title);
add(new RichTextField(
"Updating data in one transaction in MyTestDatabase.db."));
try
{
URI myURI = URI.create("file:///SDCard/Databases/SQLite_Guide/" +
"MyTestDatabase.db");
d = DatabaseFactory.open(myURI);
d.beginTransaction();
Statement st = d.createStatement("UPDATE People SET Age=7 " +
"WHERE Name='Sophie'");
st.prepare();
st.execute();
st.close();
st = d.createStatement("UPDATE People SET Age=4 " +
"WHERE Name='Karen'");
st.prepare();
st.execute();
st.close();
d.commitTransaction();
d.close();
}
catch ( Exception e )
{
System.out.println( e.getMessage() );
e.printStackTrace();
}
}
}
他们每次关闭声明是否有原因?是不是最好只在结束时关闭它(在最后一个块中也许??)。
答案 0 :(得分:3)
标准技术是在事务内部的循环内使用准备好的insert语句。在大多数情况下,这将为您提供几乎最佳的效率。它会使事情加速至少一个数量级。
答案 1 :(得分:2)
我个人不知道很多黑莓特定的做法,但这些似乎很有用(抱歉,我找不到代码片段):
"Best Practice: Optimizing SQLite Database Performance"
希望这些帮助!
答案 2 :(得分:1)
你应该做的一件事是,为数据库处理代码创建不同的方法。 只需在主代码中调用这些方法,然后在每个块中调用打开和关闭数据库。它将减少冗余,并将更好地为您的未来。这也将有助于您的应用程序性能。