【问题标题】:Blackberry SQLite optimal performance黑莓 SQLite 最佳性能
【发布时间】:2012-04-05 12:32:46
【问题描述】:

在尝试在 Blackberry 上使用 SQLite 时,我克服了许多障碍。现在我已经到了一切似乎都可以正常工作的地步,我正在寻找加快查询速度的方法。

有时我的应用程序会从 Web 服务调用中检索大量数据,这些数据会被解析并存储到我的数据库中。很多 DELETE、INSERT 和 UPDATE 正在进行。数据库调用似乎花费了很多时间。

我想知道处理 SQLite 时的一些最佳实践。最好来自专门在黑莓平台上使用它的人。任何加快 DELETE 或 INSERT 等的技巧......

链接到好的教程会很棒。或者一些更好的有用代码的 sn-ps。

提前致谢。

编辑:

这是来自 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();
 }
  }
}

他们每次都关闭声明是否有原因?在最后关闭一次不是更好吗(也许在 finally 块中??)。

【问题讨论】:

    标签: sqlite blackberry


    【解决方案1】:

    标准技术是在事务内的循环内使用准备好的插入语句。在大多数情况下,这将为您提供几乎最佳的效率。它将加快速度至少一个数量级。

    【讨论】:

      【解决方案2】:

      我个人不知道很多特定于黑莓的做法,但这些似乎很有帮助(抱歉我找不到代码 sn-ps):

      "Top 8 SQL Best Practices"

      "Best Practice: Optimizing SQLite Database Performance"

      希望这些帮助!

      【讨论】:

      • 第二个文档是一个黑莓文档,看起来他们的 SQLite 包装器包含了一种完全按照您想要的方式进行操作的方法。查看末尾的“使用批量操作方法”部分,以及“使用显式事务”。您也可以尝试关闭日记功能,但我个人认为这并没有太大区别。
      • 谢谢大家。我还在研究使用 VACUUM 对数据库文件进行碎片整理,应该多久执行一次,除了减小 db 文件本身的大小之外,它是否有其他帮助?
      【解决方案3】:

      您应该做的一件事是,为数据库处理代码创建不同的方法。 并简单地从您的主代码和 openclose 数据库中调用这些方法,也在每个块中。它将减少冗余,对您的未来更好。这也将帮助您提高应用性能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多