我正在使用Java GUI程序更新SQlite數據庫。我的Gui選項大多是帶開/關值的切換按鈕。由於Gui的特性,更新數據庫的性能需要很快,因此控制可以快速返回到Gui調用函數。Java更新SQL數據庫性能
我有下面的代碼,它運行的每一個切換按鈕選擇時間:
public static void updateDCStable(String item, int value)
{
try {
long start = System.currentTimeMillis();
Class.forName("org.sqlite.JDBC");
String url = DATABASE_FILEPATH;
Connection conn = DriverManager.getConnection(url);
Statement update = conn.createStatement();
update.execute("UPDATE DCS "
+ "SET " + item + "='" + value + "';");
update.close();
conn.close();
long time_elapsed = System.currentTimeMillis() - start;
System.out.println("Changed DCS date item " + item + " to "
+ value + " in " + time_elapsed + "(ms)");
} catch (SQLException ex) { /* Error handling */
} catch (ClassNotFoundException ex) { /* Error handling */
}
}
我的SQL表基本上是與一些列的配置信息,只是一排,所以該功能將列和更新值並相應地更新項目。該功能正常工作,它只是非常慢....
使用所用的時間,我的平均更新時間運行約550毫秒左右,最小時間爲294毫秒,最大時間爲986毫秒。有什麼方法可以加快這個過程嗎?
感謝您有用的答案。是的,我意識到連接是計算上最昂貴的部分。因此,我使用[本站]的示例實現了BoneCP Java數據庫連接池(http://tunatore.wordpress.com/2011/11/07/how-to-use-bonecp-java-database-connection-pool- JDBC池庫/)。現在我的幫助程序代碼嘗試使用conn = ConnectionManager.getConnection()來建立連接。問題是我的表現與現在的平均時間752(ms),最小262(ms)和最大2919(ms)基本相同。示例代碼是否正確,或者我錯過了什麼? – 2012-07-24 12:36:06
運行幾個測試。首先執行代碼需要更長時間(建立連接並將其添加到連接池),但後面的執行應該花費更少的時間。還執行準備好的聲明。這也將有所幫助。 – 2012-07-24 12:46:24
這就是訣竅,謝謝!平均下降到500毫秒,這接近可接受的水平。對於Java,Sqlite和BoneCP這種類型的操作以及我正在執行的寫入類型,您會期待什麼樣的時間?只是好奇。 – 2012-07-24 13:11:28