2012-04-04 57 views
0

我在嘗試在黑莓上使用SQLite時克服了很多障礙。現在我已經達到了一切正常的地步,我正在尋找加快我的查詢的方法。黑莓SQLite最佳性能

有時我的應用程序獲取了很多Web服務調用的數據,該數據被解析並存儲到我的數據庫。大量的DELETE,INSERT和UPDATE正在進行中。數據庫調用似乎花費了很多時間。

我想知道一些處理SQLite時的最佳實踐。最好來自具有黑莓平臺經驗的人。任何技巧,以加快刪除或插入等....

鏈接到很好的教程將是巨大的。或者一些有用的代碼片段甚至更好。

在此先感謝。

編輯:

這是一些來自黑莓使用交易的示例代碼。

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塊或許??)。

回答

3

標準的技術是使用準備好的INSERT語句,在事務內一個循環中。在大多數情況下,這將給你帶來幾乎最佳的效率。它會加速至少一個數量級。

2

我個人不知道有多少黑莓的具體做法,但這些似乎是有幫助的(對不起,我找不到代碼片段):

"Top 8 SQL Best Practices"

"Best Practice: Optimizing SQLite Database Performance"

希望這些幫助!

+0

第二份文件是黑莓之一,它看起來好像他們SQLite的包裝包括一個方式做你想要什麼。查看最後一節稱爲「使用批量操作方法」的部分,以及「使用顯式事務」。您也可以嘗試關閉日記功能,但是我個人發現這並沒有太大的區別。 – 2012-04-04 15:03:11

+0

謝謝你們。我也在考慮使用VACUUM對數據庫文件進行碎片整理,應該多久進行一次這樣的操作,除了減小數據庫文件本身的大小外,還有其他方面的幫助嗎? – PaulG 2012-04-04 15:13:56

1

你應該做的一件事是,創建數據庫處理代碼的不同方法。 和簡單的調用從主代碼這些方法和開放密切數據庫也是每一個塊。它將減少冗餘,並將爲您的未來帶來更好的效果。這也可以幫助您提高應用性能。