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

news/2024/7/3 1:46:27

在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;

    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 filePath, 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, "d:/data.txt", "person_info");
// 将SELECT p_name,p_age FROM person_info查询结果导出到本地文件d:/data.txt
copyToFile(connection, "d:/data.txt", "(SELECT p_name,p_age FROM person_info)");

 https://blog.csdn.net/xiao__gui/article/details/12090341


http://lihuaxi.xjx100.cn/news/245201.html

相关文章

hibernate 全面学习【lazy策略 】

2019独角兽企业重金招聘Python工程师标准>>> lazy策略可以用在&#xff1a; * <class>标签上&#xff1a;可以取值true/false * <property>标签上&#xff0c;可以取值true/false&#xff0c;这个特性需要类增强 * <set>/<list>等集合上…

python 帮助文档、自我解释

现在让我们以交互方式使用 Python 来开始研究。当我们从命令行启动 Python 时&#xff0c;就进入了 Python shell&#xff0c;在这里可以输入 Python 代码&#xff0c;而且立刻会从 Python 解释器获得响应。 清单 1. 以交互方式启动 Python 解释器 Python 2.7.15rc1 (default, …

基于angularJS和requireJS的前端架构

1、概要描述 1.1、angularJS描述:angularJS是可以用来构建WEB应用的&#xff0c;WEB应用中的一种端对端的完整解决方案。通过开发者呈现一个更高层次的抽象来简化应用的开发。最适合的就是用它来构建一个CRUD应用&#xff0c;它提供了非常方便的且统一高效的解决方案&#xff0…

中秋节,送上一次非常有趣的SQL优化实战经历

点击上方“搜云库技术团队”&#xff0c;选择“设为星标”回复“1024”或“面试题”获取4T学习资料补充&#xff1a;看到好多朋友后台留言说对SQL优化感兴趣&#xff0c;我又重新整理了下文章&#xff0c;将更多关于sql优化的知识分享出来&#xff0c;SQL优化也是面试中必问的知…

LeetCode - Maximum Depth of Binary Tree

递归求二叉树的最大深度。 /*** Definition for binary tree* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ public class Solution {public int maxDepth(TreeNode root) {if(root null)return 0…

关于css中overflow的一些理解

在做移动端开发的时候&#xff0c;遇到过这么个问题&#xff1a;要把图片进行放大&#xff0c;但有时候图片比较长&#xff0c;一个手机的版面看不了&#xff0c;于是需要用到overflow的属性&#xff0c;刚开始用了overflow-y:scroll, 于是问题来了&#xff0c;如果图片没有过长…

使用Novell.Directory.Ldap.NETStandard在.NET Core中验证AD域账号

Novell.Directory.Ldap.NETStandard是一个在.NET Core中&#xff0c;既支持Windows平台&#xff0c;又支持Linux平台&#xff0c;进行Windows AD域操作的Nuget包。 首先我们新建一个.NET Core控制台项目&#xff1a;NetCoreLdap&#xff0c;并下载如下Nuget包&#xff1a; Nove…

我,是真是一个培训班出来的程序员

点击上方“搜云库技术团队”&#xff0c;选择“设为星标”回复“1024”或“面试题”获取4T学习资料作者 l HeroMe原作者&#xff1a;HeroMe &#xff0c;文中的"我"均为作者本人。1这个城市的所有人都在忙碌的过生活&#xff0c;他们行色匆匆&#xff0c;车水马龙&am…