在Hibernate中用PostgreSQL的COPY API

PostgreSQL有一个用于高速导入导出数据的[url=http://www.postgresql.org/docs/9.2/static/sql-copy.html]COPY[/url]命令,使用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的[url=http://www.postgresql.org/docs/9.2/static/sql-copy.html]COPY[/url]命令速度很快,可以直接从流中导入和导出到流中,不象MySQL的类似命令[url=http://dev.mysql.com/doc/refman/5.6/en/load-data.html]LOAD DATA INFILE[/url]和[url=http://dev.mysql.com/doc/refman/5.6/en/select-into.html]SELECT ... INTO[/url]需要用中间文件。这两个MySQL论坛上的帖子分别是2005和2006年的:[url=http://forums.mysql.com/read.php?39,57293,57293]Using LOAD DATA INFILE with byte stream[/url] [url=http://forums.mysql.com/read.php?20,94309]load data infile from STDIN[/url],不知道现在解决了没有。
经测试,用COPY命令查询时间只有Hibernate HQL的一半,导入数据更快,不过要手写SQL代码自定义的流类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值