2015-12-02 33 views
0

我知道如何使用JDBC打開數據事務。但我認爲我可以/必須做些事情來提高數據交易的性能。例如:Java數據事務性能

public class F_Koneksi { 
private static final String JDBC_DRIVER; 
private static final String DB_URL; 
private static final String USER; 
private static final String PASS; 
static { 
    JDBC_DRIVER = "org.postgresql.Driver"; 
    DB_URL = "jdbc:postgresql://localhost:5432/MyDatabase"; 
    USER = "Username"; 
    PASS = "Password"; 
} 
private final Connection con; 
private ResultSet rs; 
private Statement stmt; 

public F_Koneksi() { 
    Connection connect; 
    try { 
     Properties props = new Properties(); 
     props.setProperty("user", USER); 
     props.setProperty("password",PASS); 
     props.setProperty("sslfactory", "org.postgresql.ssl.NonValidatingFactory"); 
     props.setProperty("ssl", "true"); 
     forName(JDBC_DRIVER); 
     connect = getConnection(DB_URL, props); 
    } catch (SQLException|ClassNotFoundException se) { 
     connect = null; 
    } 
    con = connect; 
} 
public boolean Update(String Query) { 
    try { 
     Query = Query.replaceAll("`", "\""); 
     System.out.println(Query); 
     Statement stmt = con.createStatement(); 
     stmt.executeUpdate(Query); 
     return true; 
    } catch (SQLException ex) { 
     ex.printStackTrace(); 
     return false; 
    } 
} 

而且當我必須關閉我的連接或開啓自動提交了嗎?


我該怎麼做才能提高我的應用程序數據事務性能?數據交易的正確方式如何?或者有什麼提示可以做得更好?

+0

要提高插入性能使用批處理 – Marged

回答

1

當我必須關閉我的連接?

如果您在Java EE環境(即應用程序服務器)上運行,那麼你可以得到和密切的聯繫,如你所願,因爲大多數Java EE環境將集中JDBC連接你,除非你明確禁用連接池。

如果您正在Java SE環境中運行,這取決於您如何獲取連接。對於這個例子,它看起來像你正在做一堆靜態導入(which is bad practice by the way),你只不過是從我可以告訴你使用DriverManager來獲得連接。如果這是真的,並且您正在使用DriverManager,那麼獲取連接非常昂貴!特別是一旦你開始使用遠程數據庫。你會想嘗試緩存你的連接。或者,您可以使用javax.sql.ConnectionPoolDataSource並使用getPooledConnection(),它將爲get/close方案提供更高的性能,併爲您處理連接緩存。

什麼時候應該打開/關閉自動提交?

自動提交或關閉並不是一個大問題。我總是喜歡離開自動提交,因爲通過將提交責任留給JDBC驅動程序而不太容易出錯。

如果您批量處理您的陳述,那麼對您的表現有很大的幫助。

例如:

try(Statement statement = conn.createStatement()){ 
    statement.addBatch("update people set firstname='Alice' where id=1"); 
    statement.addBatch("update people set firstname='Bob' where id=2"); 
    statement.addBatch("update people set firstname='Chuck' where id=3"); 
    statement.executeBatch(); 
}