Seltsame Fehlermeldung

Hallo, kann sich jemand aus dieser Fehlermeldung einen Reim machen?

WARN] PreparedStatementCallback; bad SQL grammar [UPDATE modo_member_profile SET picture = ? WHERE id = ?]; nested exception is org.postgresql.util.PSQLException: ERROR: column "picture" is of type bytea[] but expression is of type bytea
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [UPDATE modo_member_profile SET picture = ? WHERE id = ?]; nested exception is org.postgresql.util.PSQLException: ERROR: column "picture" is of type bytea[] but expression is of type bytea
	at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:107)
	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:276)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:553)
	at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:738)
	at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:796)
	at com.Modox.server.dal.postgres.PGMemberDAO.updatePictureForMember(PGMemberDAO.java:595)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:296)
Caused by: org.postgresql.util.PSQLException: ERROR: column "picture" is of type bytea[] but expression is of type bytea
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:305)
	at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
	at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:744)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:537)
	at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:738)
	at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:796)
	at com.Modox.server.dal.postgres.PGMemberDAO.updatePictureForMember(PGMemberDAO.java:595)

Ich bekomme sie, wenn folgender Code ausgeführt wird:

private static final String UPDATE_PICTURE = “UPDATE modo_member_profile SET picture = ? WHERE id = ?”;

public void updatePictureForMember(final Member member, final byte picture) {

getJdbcTemplate().update(UPDATE_PICTURE, new PreparedStatementSetter() {

public void setValues(PreparedStatement ps) throws SQLException {

ps.setBinaryStream(1,
new ByteArrayInputStream(picture),
picture.length);

ps.setLong(2, member.getId());
}
});
}

Wenn ich das recht sehe, übergebe ich doch eine ByteArea und die Spalte ist eigentlich auch ein ByteArea.

Das ganze funktioniert übrigens offenbar unter Windows (pgsql + appserver).

Bei mir laufen pgsql&appserver unter OSX und da bekomm ich diese Meldung.

Irgendwelche Ideen?

Viele Dank

Mike

Hast Du

column "picture" is of type bytea[] but expression is of type bytea

übersehen?

Andreas

Hi,

nein, eigentlich nicht. Zumindest nicht laut dem, der diesen Teil programmiert hat. Im Source wird doch ein byte[], also ein Byte array übergeben. Oder nicht?

Siehe Quelltext oben:

-> final byte[] picture

-> ps.setBinaryStream(1,
new ByteArrayInputStream(picture),
picture.length);


Oder muss man da etwas anders machen/übergeben?

Falls jemand nochmal das selbe Problem hat.

Ich habe nun statt setBinaryStream die Methode setBytes benutzt und nun funktioniert es.

Interessant wär noch zu wissen, warum mit setBinaryStream unter OSX nicht funktioniert hat.

Gruss

Micha