Re: jdbc problem - Mailing list pgsql-general

From Richard Huxton
Subject Re: jdbc problem
Date
Msg-id 200304241015.28464.dev@archonet.com
Whole thread Raw
In response to jdbc problem  ("milimeter@163.com" <milimeter@163.com>)
List pgsql-general
On Thursday 24 Apr 2003 2:38 am, milimeter@163.com wrote:
> Hi, all
>
>     I have a table: CREATE TABLE person (age char(4))
>     After executing "select age from person" with jdbc, I extract the value
> with:
>     getInt("age")
>     Now is the problem, the same code can succeed on oracle, but on
> postgresql, because of not triming space automaticlly, it cause an error.

If you don't want space-padded text, don't use char(), use varchar(). The
char(4) column *always* contains four characters (space padded).

If for some reason you need to use char() types, then just trim it before
applying getInt() or write your own function that can cope with trailing
spaces.

>     So, I hope the newest jdbc driver for postgresql can automaticlly trim
> space just like oracle. The same problem also exists when execute insert:
>     Provided "age" is an integer, then "insert into person values ('30')"
> can be executed correctly, but "insert into person values ('')" can not. On
> oracle, a default value will be added. So jdbc driver for postgresql should
> also do it.

Oracle is probably treating the empty string as a null, which is where your
default value is coming from. It shouldn't do this, since the empty string is
not null.

Testing here, I can insert values of 30, '30', '' into a char(4) fine from the
command-line. Ah! Unless where you say "age is an integer" you mean that the
age column is of type integer, in which case PG can't translate an empty
string into an integer (and nor can I). On the other hand, the string '30'
can obviously be converted to an integer.

--
  Richard Huxton


pgsql-general by date:

Previous
From: Brian Piatkus
Date:
Subject: Re: Regexps and Indices.
Next
From: Adam Witney
Date:
Subject: Unusual behaviour with intarray