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 INFILE 和 SELECT ... INTO 须要用中间文件。这两个MySQL论坛上的帖子分别是2005和2006年的: Using LOAD DATA INFILE with byte stream load data infile from STDIN ,不知道如今解决了没有。
经测试,用COPY命令查询时间只有Hibernate HQL的一半,导入数据更快,不过要手写SQL代码自定义的流类型。 html