날짜별로 테이블에 데이터를 내보내려고하므로 jdbc를 사용하여 Java 프로그램을 작성합니다. 내가 서버에 프로그램을 실행할 때 데이터베이스가 또 다른 단절, 나는이 program.But에서 데이터베이스에 연결하는 동안jdbc를 사용하여 postgresql에서 .csv 파일로 데이터를 내보내는 방법은 무엇입니까?
public void exportData(Connection conn,String filename) {
Statement stmt;
String query;
try {
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
Date startDate = dateFormat.parse("2014-08-21 00:00:00");
Date endDate = dateFormat.parse("2014-08-22 00:00:00");
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(endDate);
Calendar thisDayCalendar = startCalendar;
while(!thisDayCalendar.after(endCalendar)){
Date thisDayDate = thisDayCalendar.getTime();
thisDayCalendar.add(Calendar.DATE, 1);
Date nextDayDate = thisDayCalendar.getTime();
String thisDayString = dateFormat.format(thisDayDate);
String nextDayString = dateFormat.format(nextDayDate);
SimpleDateFormat dateFormat1 = new SimpleDateFormat ("yyyy-MM-dd");
String fileDateString = dateFormat1.format(thisDayDate);
//For comma separated file
query ="COPY (SELECT * FROM signals WHERE date_time >= '" + thisDayString +
"' AND date_time < '" +nextDayString + "') TO " +filename + fileDateString + ".csv delimiter ','";
stmt.executeQuery(query);
//System.out.println(query);
}
} catch(Exception e) {
e.printStackTrace();
stmt = null;
}
}
이 프로그램은 서버에서 실행되고, 난 단지 수퍼 유저가 복사 할 수있어 오류 또는 파일에서 : 나는 온라인 솔루션을 검색하고 명령을 '\ 복사'하지만 컴파일 할 때, 또 다른 오류가 말했다 psql 프로그램을 사용하려고
org.postgresql.util.PSQLException: ERROR: must be superuser to COPY to or from a file
Hint: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:560)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:283)
at DBase.exportData(ExportSignal.java:85)
at ExportSignal.main(ExportSignal.java:23)
'\'자바에 잘못된 이스케이프 문자는 그래서 "이중 슬래시 복사"썼다 인 프로그램을 실행할 때 구문 오류가 발생했습니다.
query ="\COPY (SELECT * FROM signals WHERE date_time >= '" + thisDayString +
"' AND date_time < '" +nextDayString + "') TO " +filename + fileDateString + ".csv delimiter ','";
누구나 프로그램을 실행하거나 "\ copy"의 잘못된 이스케이프 문자 문제를 해결하는 방법을 알고 있습니까?
http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager로 출력 텍스트를 포맷합니다. html –
다음 링크는 도움을 드릴 수 있습니다. http://stackoverflow.com/questions/1517635/save-pl-pgsql-output-from-postgresql-to-a-csv-file –
Thanks @BhavinPanchani, 나는 지침을 따른다. , "\ copy"는 명령어 라인으로 작동하지만이 자바 프로그램에서 동작합니다 – chenchenmomo