在Hibernate中用PostgreSQL的COPY API

PostgreSQL有一個用於高速導入導出數據的COPY 命令,使用JDBC能夠調用,可是在Hibernate中調用要麻煩一些,這是Hibernate4.1下用c3p0鏈接池時的調用方法: php

public CopyManager getCopyManager() throw Exception {
    final SessionImpl s = (SessionImpl)getSession();  //獲取Hibernate Session 實例
    final Connection connection = s.getTransactionCoordinator().getJdbcCoordinator().getLogicalConnection().getConnection();
    final C3P0ProxyConnection con = (C3P0ProxyConnection)connection;
    final Method m = BaseConnection.class.getMethod("getCopyAPI", new Class[]{});
    final Object[] arg = new Object[] {};
    return (CopyManager) con.rawConnectionOperation(m, C3P0ProxyConnection.RAW_CONNECTION, arg);
}
在須要導入導出大量數據時,PostgreSQL的 COPY 命令速度很快,能夠直接從流中導入和導出到流中,不象MySQL的相似命令 LOAD DATA INFILESELECT ... INTO 須要用中間文件。這兩個MySQL論壇上的帖子分別是2005和2006年的: Using LOAD DATA INFILE with byte stream load data infile from STDIN ,不知道如今解決了沒有。

經測試,用COPY命令查詢時間只有Hibernate HQL的一半,導入數據更快,不過要手寫SQL代碼自定義的流類型。 html

相關文章
相關標籤/搜索