Обсуждение: PreparedStatement.setString

Поиск
Список
Период
Сортировка

PreparedStatement.setString

От
"Bert Hiri"
Дата:
Hi,

Suppose I have a table like:

    CREATE TABLE test
    ( id    DECIMAL(10)
    );

When executing the following statement from the psql command prompt:

    INSERT INTO test(id) VALUES ('12345');

That will succeed.

When executing the following from JDBC:

    PreparedStatement stmt =
        con.prepareStatement("INSERT INTO test(id) VALUES (?)");
    stmt.setString("12345");
    stmt.executeUpdate();

This will fail. With the message:

    Cause: ERROR: column "id" is of type numeric but expression is of type
character varying

I think this shouldn't fail. This exact same piece of Java code does work
with all other databases that I work with. And psql doesn't seem to mind
taking a string value either, so why should the PreparedStatement?




Regards,
Bert


Re: PreparedStatement.setString

От
Oliver Jowett
Дата:
Bert Hiri wrote:

>     PreparedStatement stmt =
>         con.prepareStatement("INSERT INTO test(id) VALUES (?)");
>     stmt.setString("12345");
>     stmt.executeUpdate();
>
> This will fail. With the message:
>
>     Cause: ERROR: column "id" is of type numeric but expression is of type
> character varying
>
> I think this shouldn't fail. This exact same piece of Java code does work
> with all other databases that I work with. And psql doesn't seem to mind
> taking a string value either, so why should the PreparedStatement?

See http://archives.postgresql.org/pgsql-jdbc/2005-03/msg00060.php for
past discussion of this.

In summary: it might be a common idiom, but the JDBC spec doesn't
require drivers to support it, and there are protocol-level reasons why
it is not easy to support.

-O