how to handle data containing '\0'

Поиск
Список
Период
Сортировка
От EBIHARA, Yuichiro
Тема how to handle data containing '\0'
Дата
Msg-id 001f01c679a9$a3627350$360aa8c0@ipljp.local
обсуждение исходный текст
Ответы Re: how to handle data containing '\0'  (Kris Jurka <books@ejurka.com>)
Список pgsql-jdbc
Hi experts,

I need to handle String data containing '\0' in my Java + JDBC program. Such data can happen at other systems and be
sentto 
PostgreSQL. Here is a sample to simulate it in Java code.

        char c = '\0';
        String val = "abc" + c + "def";

Now I have to support two versions of drivers, 7.4 and 8.1, but the behavior of driver depends on versions when I
insertthis String 
value.

=== pg74.216.jdbc3.jar ===
java.lang.IllegalArgumentException: \0 not allowed
    at org.postgresql.jdbc1.AbstractJdbc1Statement.escapeString(AbstractJdbc1Statement.java:1152)
    at org.postgresql.jdbc1.AbstractJdbc1Statement.setString(AbstractJdbc1Statement.java:1133)
    at org.postgresql.jdbc1.AbstractJdbc1Statement.setString(AbstractJdbc1Statement.java:1116)
    at Bug5391.main(Bug5391.java:24)

=== postgresql-8.1-405.jdbc3.jar ===
Successfully finished without exception but the string is truncated at '\0' and only the first three characters, "abc",
isinserted. 
(I verified this with psql on the server side)

I understand the current protocol does not allow '\0' in String and basically I should remove '\0' before I try to
insertbut I and 
team members may forget it somewhere. I'm feeling the 8.1 behavior is worse than 7.4 because user data is truncated
withoutnotice. 
For the sample above, I expect "abcdef" rather than "abc".

What do you think about this?
My idea is to introduce new connection parameter to determine how to behave against '\0'.
Options may be

 - throws an exception
 - truncates at '\0'
 - removes '\0'

Thanks,

ebi



В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Oliver Jowett
Дата:
Сообщение: Re: jdbc driver problem?
Следующее
От: Marc Herbert
Дата:
Сообщение: Re: how to handle data containing '\0'