`
liuwangxia
  • 浏览: 135300 次
  • 性别: Icon_minigender_1
  • 来自: 黄石
社区版块
存档分类
最新评论

在Hibernate中用PostgreSQL的COPY API

阅读更多
PostgreSQL有一个用于高速导入导出数据的COPY命令,使用JDBC可以调用,但是在Hibernate中调用要麻烦一些,这是Hibernate4.1下用c3p0连接池时的调用方法:


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代码自定义的流类型。
2
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics