Thread: jdbc problem

jdbc problem

From
"milimeter@163.com"
Date:
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.

    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.

    Yours,
    mili


Re: jdbc problem

From
Richard Huxton
Date:
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