`

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 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)");

原文  http://blog.csdn.net/xiao__gui/article/details/12090341
分享到:
评论

相关推荐

    postgresql-42.3.1-API文档-中文版.zip

    Maven坐标:org.postgresql:postgresql:42.3.1; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...

    postgresql-42.2.5-API文档-中英对照版.zip

    Maven坐标:org.postgresql:postgresql:42.2.5; 标签:postgresql、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    ext-postgresql::elephant:PostgreSQL基于协程的客户端

    ext-postgresql是Swoole Postgres客户端库,可以在协程环境中使用而不会阻塞。 前提条件 libpq是必需的 swoole版本> = 4.4.0 建造与安装 git clone git@github.com:swoole/ext-postgresql.git phpize ./configure ...

    ArcGIS连接Postgresql需要的32位客户端文件

    总之,ArcGIS通过这些32位客户端库文件与PostgreSQL数据库进行安全、高效的通信,以实现地理空间数据的存储、查询、分析和展示。理解和掌握这些文件的作用对于成功配置和维护ArcGIS与PostgreSQL的连接至关重要。

    PostgreSQL:简介和概念(Bruce Momjian)PostgreSQL: Introduction and Concepts (Bruce Momjian)

    Bruce Momjian作为PostgreSQL的核心开发者之一,编写了《PostgreSQL:简介和概念》一书,旨在向数据库新手和有一定经验的开发者提供一本实用的指南。 该书内容覆盖了PostgreSQL的基本概念、架构设计、SQL语言使用、...

    postgreSQL copy

    当你有一个包含数据的文件,想要快速将其导入到PostgreSQL表中时,可以使用`COPY FROM`。例如,假设你有一个名为`data.csv`的CSV文件,表名为`my_table`,并且该文件的列顺序与表结构匹配,可以执行以下命令: ```...

    postgresql-42.2.2-API文档-中英对照版.zip

    Maven坐标:org.postgresql:postgresql:42.2.2; 标签:postgresql、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    postgresql-42.6.0.jar 对 java 8的支持postgresql驱动包

    postgresql-42.6.0.jar 对 java 8的支持postgresql驱动包

    PostgreSQL:PostgreSQL客户端

    **PostgreSQL:强大的开源数据库系统** PostgreSQL,简称PG,是一种功能丰富的开源对象关系数据库管理系统(ORDBMS),它以其高度的稳定性和灵活性而受到全球开发者的广泛青睐。作为一款客户端工具,它提供了多种...

    postgresql+postgis安装和空间数据的导入

    对于Linux用户,可以使用相应的包管理器来安装PostgreSQL,例如使用apt-get命令在Ubuntu系统中安装PostgreSQL: ``` sudo apt-get install postgresql ``` 二、PostGIS的安装 PostGIS是PostgreSQL的一个扩展,...

    postgresql32dll

    标题“postgresql32dll”指的是一个与PostgreSQL数据库系统相关的32位动态链接库(DLL)文件。在Windows操作系统中,DLL文件是可由多个程序同时使用的代码和数据的集合,它们提供了共享功能,减少了内存占用。在这个...

    PgBulkInsert:Java库,可使用二进制COPY协议高效地批量插入PostgreSQL

    PgBulkInsert是一个Java库,用于使用Binary COPY协议批量插入PostgreSQL。 它提供了PostgreSQL 的包装器: 是PostgreSQL特有的功能,它允许高效地批量导入表或从表导出数据。 与使用INSERT和SELECT相比,这是将...

    java-postgresql:Java中的Postgresql项目

    在Java编程语言中,PostgreSQL是一种广泛使用的开源关系数据库管理系统,它以其强大的功能、稳定性以及对ACID(原子性、一致性、隔离性、持久性)事务的支持而受到开发者青睐。"java-postgresql"项目通常指的是Java...

    postgresql32dll.zip

    标题“postgresql32dll.zip”所指的压缩包包含了五个重要的32位动态链接库(DLL)文件,这些文件对于ArcGIS与PostgreSQL数据库之间的连接至关重要。ArcGIS是一款广泛使用的地理信息系统软件,而PostgreSQL是一种功能...

    postgresql 入门

    2. 安装 PostgreSQL: a) 运行 *.exe 文件。 b) 选择安装目录。 c) 选择数据文件存放目录。 d) 设置密码。 e) 设置端口。 f) 高级选项,默认即可。 g) 下一步,直到安装完成。 客户端使用 PostgreSQL 自带了一个...

    PostgreSQL教程(十八):客户端命令(2)

    PostgreSQL 是一个功能强大的开源关系型数据库管理系统,其客户端命令对于管理和维护数据库至关重要。本文将深入探讨其中的三个主要客户端工具:pg_dump、pg_restore 和 psql,以及它们在实际应用中的示例。 首先,...

    postgresql-42.2.18.jar

    PostgreSQL社区于2020年10月17日发布JDBC紧急修复版本v42.2.18。该版本主要修复了42.2.17版本中并未完全修复的gssEncMode问题。

    postgresql-42.2.2-API文档-中文版.zip

    Maven坐标:org.postgresql:postgresql:42.2.2; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...

    postgresql客户端及安装步骤.zip

    本压缩包“postgresql客户端及安装步骤.zip”提供了在Linux系统上安装和配置PostgreSQL 9.5.3版本的详细指导,帮助用户实现单节点数据库部署。 在开始安装前,你需要了解一些基本概念: 1. **PostgreSQL客户端**:...

Global site tag (gtag.js) - Google Analytics