2014-09-23 2 views
3

나는 문자열의 배열을 포스트그레스에 삽입하려고합니다. Postgres에서 잘못된 유형 오류가 발생합니다.자바 문자열 설정 [포스트 그레스 준비된 문을

public static void main(String[] args) throws SQLException { 
    String[] skus = { "0514", "0414", "0314", "0214", "0114", "1213", "1113", "1013", "0913", "0813", "0713", "0613" }; 
    String sqlString = "Insert into dbo.Inventory_Metrics skus values(?)"; 
    Connection conn = DriverManager.getConnection(getPostgresConnUrl()); 
    PreparedStatement ps = conn.prepareStatement(sqlString); 

    //THIS NEXT LINE THROWS AN ERROR 

    ps.setObject(1, skus, java.sql.Types.NVARCHAR, skus.length); 
    int status = ps.executeUpdate(); 
    ps.close(); 

    System.out.print(status); 
} 
public static String getPostgresConnUrl() { 
    String database = "mycode"; 
    String userName = "xxxxxxxx"; 
    String password = "xxxxxxxx"; 
    return "jdbc:postgresql://192.168.0.50:5432/" + database + "?user=" + userName + "&password=" + password; 

} 
+0

하지만 당신은 하나의 물음표를 가지고 있고, 값의 배열입니다. 쉼표로 구분 된 값의 문자열을 대신 사용해보십시오. –

+1

JDBC API는 이러한 방식으로 작동하지 않습니다. 당신이 원하는 것을 설명하십시오. 그 중 PostgreSQL은'NVARCHAR' 타입을 지원하지 않습니다 afaik –

+0

ps.setObject (1, skus, java.sql.Types.VARCHAR, skus.length); // 오류를 수정하고 답변으로 게시하십시오. – Voltron

답변

6

설명서마다 JDBC array API을 사용해야합니다.

JDBC의 배열은 setObject 일뿐입니다. 그게 효과가 있다면 좋겠지 만 그렇지는 않습니다. 배열을 특별히 처리해야합니다.

Array jdbcSkus = con.createArrayOf("VARCHAR", skus); 
pstmt.setArray(2, jdbcSkus); 
+1

@NathanHughes 삭제 된 답변 다시 작성 - 대부분의 DBMS는 원시 배열을 지원하며 피해야 할 경우 쉼표로 구분 된 데이터를 저장하는 것이 거의 불가능합니다 (http://dba.stackexchange.com/q/55871/7788). –

+0

이 동의 했으므로 OP가 무엇을 원했는지 확실하지 않았습니다. 나는 nvarchar가 옳았다 고 생각하고 그걸 가지고 갔다가 Mark의 코멘트를 보았을 때 삭제되었습니다. 쉼표로 분리 된 데이터를 피하는 것에 대해서는 더 이상 동의 할 수 없습니다. 그러나 배열이 훨씬 더 낫지는 않습니다. –