java - 复制Postgres jdbc的正确使用方法

标签 java postgresql jdbc postgresql-copy

无法对 jdbc Postgres 使用复制命令。以下代码片段示例有什么问题。

public boolean loadReportToDB(String date) {
        // TODO Auto-generated method stub
        Connection connection = DBUtil.getConnection("POSTGRESS");
        String fileName = "C:/_0STUFF/NSE_DATA/nseoi_" + date + ".csv";
        String sql = "\\copy fno_oi FROM 'C:\\_0STUFF\\NSE_DATA\\nseoi_27102017.csv' DELIMITER ',' CSV header";
        try {
            PreparedStatement ps = connection.prepareStatement(sql);
            System.out.println("query"+ps.toString());
            int rowsaffected = ps.executeUpdate();
            System.out.println("INT+" + rowsaffected);
            return true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return false;
    }
org.postgresql.util.PSQLException: ERROR: syntax error at or near "\"
  Position: 1
    at org.

如果我们使用

String sql = "copy fno_oi FROM 'C:\\_0STUFF\\NSE_DATA\\nseoi_27102017.csv' DELIMITER ',' CSV header";

然后没有行被更新

postgres 版本 postgresql-10.0-1-windows-x64

最佳答案

这对我有用:

try (Connection conn = DriverManager.getConnection(connUrl, myUid, myPwd)) {
    long rowsInserted = new CopyManager((BaseConnection) conn)
            .copyIn(
                "COPY table1 FROM STDIN (FORMAT csv, HEADER)", 
                new BufferedReader(new FileReader("C:/Users/gord/Desktop/testdata.csv"))
                );
    System.out.printf("%d row(s) inserted%n", rowsInserted);
}

使用 copyIn(String sql, Reader from) 的优点是避免了 PostgreSQL 服务器进程无法直接读取文件的问题,要么是因为它缺少权限(比如在我的桌面上读取文件) ) 或者因为该文件不在运行 PostgreSQL 服务器的机器的本地。

关于java - 复制Postgres jdbc的正确使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46988855/

相关文章:

JAVA "cannot be cast to java.lang.String"

java - 如何更改 LocalDate 格式,生成 LocalDate,而不生成字符串

java - RSA 加密 : Difference between Java and Android

java - 如何找到 Oracle 数据库的 URL?

python - Pyspark 朴素贝叶斯批量使用拟合

Java:向方法传递多个参数

ruby-on-rails - 删除一些以前的数据后,如何在 PostgreSQL 中重新启动对表的 id 计数?

node.js - Node ,postgres pg-promise : Leaking active handles ONLY in azure webapp container

java - Oracle JDBC 选择 WHERE 返回 0

python - 如何在 django 测试设置中创建 postgresql 扩展