微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL:Java使用CopyManager实现客户端文件COPY导入

MysqL中,可以使用LOAD DATA INFILE和LOAD DATA LOCAL INFILE两种方式导入文本文件中的数据到数据库表中,速度非常快。其中LOAD DATA INFILE使用的文件要位于MysqL所在服务器上,LOAD DATA LOCAL INFILE则使用的是客户端的文件

LOAD DATA INFILE 'data.txt' INTO TABLE table_name;
LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE table_name;

在Postgresql中也可以导入相同类型的文本文件,使用的是copY命令:

copY table_name FROM 'data.txt';

但是这个语句只能导入Postgresql所在服务器上的文件,要想导入客户端文件,就需要使用下面的语句:

copY table_name FROM STDIN;

在Java中,可以通过设置流的方式,设置需要导入的客户端本地文件

	public void copyFromFile(Connection connection,String filePath,String tableName) 
			throws sqlException,IOException {
		
		FileInputStream fileInputStream = null;

		try {
			copyManager copyManager = new copyManager((BaseConnection)connection);
			fileInputStream = new FileInputStream(filePath);
			copyManager.copyIn("copY " + tableName + " FROM STDIN",fileInputStream);
		} finally {
			if (fileInputStream != null) {
				try {
					fileInputStream.close();
				} catch (IOException e) {
					e.printstacktrace();
				}
			}
		}
	}

另外,还可以使用copY table_name TO STDOUT来导出数据文件到本地,和上面的导入相反,可以用于数据库备份。此外,还支持导出一个SQL查询结果:

copY (SELECT columns FROM table_name WHERE ……) TO STDOUT;

Java代码如下:

	public void copyToFile(Connection connection,String tableOrQuery) 
			throws sqlException,IOException {
		
		FileOutputStream fileOutputStream = null;

		try {
			copyManager copyManager = new copyManager((BaseConnection)connection);
			fileOutputStream = new FileOutputStream(filePath);
			copyManager.copyOut("copY " + tableOrQuery + " TO STDOUT",fileOutputStream);
		} finally {
			if (fileOutputStream != null) {
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					e.printstacktrace();
				}
			}
		}
	}

使用方式:

// 将本地d:/data.txt文件中的数据导入到person_info表中
copyFromFile(connection,"d:/data.txt","person_info");
// 将person_info中的数据导出到本地文件d:/data.txt
copyToFile(connection,"person_info");
// 将SELECT p_name,p_age FROM person_info查询结果导出到本地文件d:/data.txt
copyToFile(connection,"(SELECT p_name,p_age FROM person_info)");



作者:叉叉哥 转载请注明出处:http://www.jb51.cc/article/p-pjfgszzj-mb.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果是个PostGreSQL的数据,于是装数据库,但这个也不懂呀,而且本系统用的Oracle,于是得解决迁移转换的问题。 总结下来两个思路。1、PostgresToOracle多金的
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么查看PostgreSQL数据库中所有表”文章能帮助大...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正确。  pg_hba.conf文件在Postgre安装文件目录下的data文件夹中。解决方案1、进入到data目录下,找到pg_hba.conf文件
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本地localhost访问正常,在相同网段的远程机器访问报如下错误
wamp 环境 这个提示就是说你的版本低于10了。 先打印php_info(),查看自己的版本(我这边是已经处理后的,之前的忘记截图了)
psycopg2.OperationalError: SSL SYSCALL error: EOF detected 问题提示:exception psycopg2.OperationalError
项目 postgres 连接不上, 所有连接报错 :psql: FATAL: sorry, too many clients already问题原由程序使用连接未及时释放, 连接一直处于 idle 状态处理方式1、 程序里面未释放的连接, 在使用后及时释放
服务器在同一个数据目录上启动了两个PostgreSQL实例(它已经删除postmaster.pid并使用了新的端口号,因此绕过了这种行为的正常保护措施被绕过),导致PostgreSQL的误操作postgresql 报错 FATAL: the database system is
问题原因:数据库崩溃,内存不足造成 或者 数据已损坏,磁盘故障造成首先介绍一下背景,在测试Deepgreen(Greenplum升级版)数据库时,pgbench并发数设置过多,导致数据库卡死了,在进行连接、重启、关闭时,都报同样
第 11 届 PostgreSQL 中国技术大会于 2022 年 1 月 7 日至 9 日在武汉光谷会展酒店成功举办。作为 PostgreSQL 技术领域的年度盛事,postgreSQL 中文社区旨在搭建开放、合作共享的平台,基于开源,创新驱动,共同探讨数据库行业数字化发展方向和未来新机遇。