1

Java と JDBC を使用してタイムスタンプの配列を Postgres 関数に渡すにはどうすればよいですか?

関数のシグネチャは次のとおりです。

CREATE OR REPLACE FUNCTION getlistcount(_id integer, _subs text, _download_array timestamp without time zone[], _filter integer, _fault text) RETURNS refcursor AS...

配列を作成する Java コードは次のとおりです。

GregorianCalendar[] dataDownloads = 
        downloadTimes.toArray(new GregorianCalendar[downloadTimes.size()]);

Array sqlArray = conn.createArrayOf("timestamp", dataDownloads);
cstmt.setArray(4, sqlArray);

downloadTimes は、Java 関数に渡されるリストです。

1 つのヒント: Postgres のドキュメントによると、時刻と日付を連結する必要があります。

4

2 に答える 2

2

StackOverflow で同様の回答を見つけましたが、JDBC 表記ではなく PreparedStatement を使用しています。

//Get timezone from first entry, assuming all same timezone
if(!downloadTimes.isEmpty()) {
    cal.setTimeZone(downloadTimes.get(0).getTimeZone());
}

//Create an array of timestamps
java.sql.Timestamp [] array = new java.sql.Timestamp [downloadTimes.size()];

for(int i=0; i < array.length; i++) {
    array[i] = new java.sql.Timestamp(downloadTimes.get(i).getTimeInMillis());
} 

//pass the array to JDBC call
//conn is the connection, and cstmt is the CallableStatement
Array sqlArray = conn.createArrayOf("timestamp", array);
cstmt.setArray(4, sqlArray);
于 2012-05-11T17:43:54.993 に答える