BUG #6292: java.sql.PreparedStatement.setNull() throws PSQLException

Lists: pgsql-bugspgsql-jdbc
From: "David Pinheiro" <davidsantospinheiro(at)gmail(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #6292: java.sql.PreparedStatement.setNull() throws PSQLException
Date: 2011-11-14 16:31:02
Message-ID: 201111141631.pAEGV2pt071873@wwwmaster.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs pgsql-jdbc


The following bug has been logged online:

Bug reference: 6292
Logged by: David Pinheiro
Email address: davidsantospinheiro(at)gmail(dot)com
PostgreSQL version: 8.4
Operating system: Linux
Description: java.sql.PreparedStatement.setNull() throws
PSQLException
Details:

I'm trying to make:
java.sql.PreparedStatement.setNull(1,java.sql.Types.NULL);

But i get:
org.postgresql.util.PSQLException: ERROR: column "number_column" is of type
integer but expression is of type character varying
Hint: You will need to rewrite or cast the expression.

My code is something like:
if (String.valueOf(input_field) == "null"){
statement.setNull(1, java.sql.Types.NULL);
} else {
statement.setObject(1, valor);
}
statement.executeUpdate();

Java says:
org.postgresql.util.PSQLException: ERROR: column "number_column" is of type
integer but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
Position: 159
at
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorI
mpl.java:2096)
at
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.ja
va:1829)
at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)

at
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.j
ava:510)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2St
atement.java:386)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2State
ment.java:332)
at
pt.cm_olhao.tecidoempresarial.database.estabelecimentos.EstabelecimentosFree
formStatementDelegate.storeRow(EstabelecimentosFreeformStatementDelegate.jav
a:160)

I have Postgresql 8.4 and postgresql-jdbc-8.4-703.

Thanks a lot!
David Pinheiro


From: Kris Jurka <books(at)ejurka(dot)com>
To: David Pinheiro <davidsantospinheiro(at)gmail(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org, pgsql-jdbc(at)postgresql(dot)org
Subject: Re: BUG #6292: java.sql.PreparedStatement.setNull() throws PSQLException
Date: 2011-11-16 21:38:46
Message-ID: alpine.BSO.2.00.1111161635310.14447@leary.csoft.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs pgsql-jdbc

On Mon, 14 Nov 2011, David Pinheiro wrote:

>
> Bug reference: 6292
> PostgreSQL version: 8.4
> Description: java.sql.PreparedStatement.setNull() throws
> PSQLException
> Details:
>
> I'm trying to make:
> java.sql.PreparedStatement.setNull(1,java.sql.Types.NULL);
>
> org.postgresql.util.PSQLException: ERROR: column "number_column" is of type
> integer but expression is of type character varying
> Hint: You will need to rewrite or cast the expression.
>
>
> My code is something like:
> if (String.valueOf(input_field) == "null"){
> statement.setNull(1, java.sql.Types.NULL);
> } else {
> statement.setObject(1, valor);
> }
> statement.executeUpdate();
>

I don't think your problem is with setNull, I think your problem is
actually with the setObject branch of your if statement. If the
valor variable is a String, the JDBC driver is assigning it a string
type. You may want to do setObject(1, valor, Types.INTEGER) or
convert it prior to doing the setObject call to an appropriate
numeric type.

Kris Jurka