无法对 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/