\0 and IllegalArgumentException - Mailing list pgsql-jdbc

From Sebastiaan van Erk
Subject \0 and IllegalArgumentException
Date
Msg-id 1099043710.595.50.camel@localhost
Whole thread Raw
Responses Re: \0 and IllegalArgumentException  (Oliver Jowett <oliver@opencloud.com>)
Re: \0 and IllegalArgumentException  (Vadim Nasardinov <vadimn@redhat.com>)
List pgsql-jdbc
Hi,

I'm using postgres 7.4 with the latest JDBC driver, and had an insert
statement to insert data as follows

try
{
    ...
    ps.setCharacterStream(1, myStream, myStreamLength);
    ps.executeUpdate();
}
catch (SQLException e)
{
...
}

With this I was hoping to catch invalid inserts (with an SQLException),
however I'm getting:

java.lang.IllegalArgumentException: \0 not allowed

which is an UNCHECKED runtime exception, that in no way indicates
(programatically) that the insert failed.

I think very few people would expect a runtime exception on what
essentially amounts to a failed insert. Futhermore, it is very hard to
discover the SOURCE of the runtime exception (lots of things might throw
an IllegalArgumentException) and to programatically do something
sensible with this.

Thus in my opinion, an SQLException would be better here for at least
three reasons:
1) It's a checked exception (I'm counting on it happening)...
2) I will know where it came from (postgres)...
3) Now I'm totally unsure of what other kind of runtime exceptions the
postgres driver may throw for some reason or other, nor do I know how to
handle a runtime exception properly if one does occur... I want runtime
exceptions basically only on PROGRAMMATIC errors, errors that I as the
developer made and can fix. User data CAN in fact contain \0, and the
fact that postgres cannot handle this is an issue of the backend, which
(in the case of postgres, but certainly not in the case of all
databases) does not consider these kind of strings as valid. As the
developer (oblivious to what kind of backend database is used) I cannot
take any programmatic steps to avoid this problem (other than string
scanning caught IllegalArgumentExceptions for this specific problem).

In conclusion, I REALLY think that this is the wrong exception to be
thrown.

Greetings,
Sebastiaan van Erk



pgsql-jdbc by date:

Previous
From: Kris Jurka
Date:
Subject: Re: Serializable transactions and SQLException
Next
From: Giampaolo Tomassoni
Date:
Subject: Re: Serializable transactions and SQLException