Обсуждение: One question about callablestatement

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

One question about callablestatement

От
张元超
Дата:
Hi,
    Now ,i found one question about callablestatement.if i have a function whoes name containts '}',and i call it by callablestatement,there will be a 'PSQLException'. Like this:

    org.postgresql.util.PSQLException: Malformed function or procedure escape syntax at offset 19.
at org.postgresql.core.Parser.modifyJdbcCall(Parser.java:644)
at org.postgresql.jdbc2.CachedQueryCreateAction.create(CachedQueryCreateAction.java:40)
at org.postgresql.jdbc2.CachedQueryCreateAction.create(CachedQueryCreateAction.java:21)
at org.postgresql.util.LruCache.borrow(LruCache.java:94)
at org.postgresql.jdbc2.AbstractJdbc2Connection.borrowQuery(AbstractJdbc2Connection.java:106)
at org.postgresql.jdbc2.AbstractJdbc2Statement.<init>(AbstractJdbc2Statement.java:227)
at org.postgresql.jdbc3.AbstractJdbc3Statement.<init>(AbstractJdbc3Statement.java:49)
at org.postgresql.jdbc3g.AbstractJdbc3gStatement.<init>(AbstractJdbc3gStatement.java:29)
at org.postgresql.jdbc4.AbstractJdbc4Statement.<init>(AbstractJdbc4Statement.java:33)
at org.postgresql.jdbc42.AbstractJdbc42Statement.<init>(AbstractJdbc42Statement.java:27)
at org.postgresql.jdbc42.Jdbc42Statement.<init>(Jdbc42Statement.java:31)
at org.postgresql.jdbc42.Jdbc42PreparedStatement.<init>(Jdbc42PreparedStatement.java:21)
at org.postgresql.jdbc42.Jdbc42CallableStatement.<init>(Jdbc42CallableStatement.java:17)
at org.postgresql.jdbc42.Jdbc42Connection.prepareCall(Jdbc42Connection.java:46)
at org.postgresql.jdbc3.AbstractJdbc3Connection.prepareCall(AbstractJdbc3Connection.java:325)
at org.postgresql.jdbc2.AbstractJdbc2Connection.prepareCall(AbstractJdbc2Connection.java:333)

The function name i used is "test_fu}n2".Yeah,i kown that may be nobody will create a function with some name like this,but, it can be created successfully.Ok, i check the code of jdbc,i found some problem lead to the question above. The code file is org/postgresql/core/Parser.java,and row 603 to row 646,the handle of '}' .

I have no idea if it is necessary to modify it.

Re: One question about callablestatement

От
Dave Cramer
Дата:
Yes we would not expect you to use a } in a function name. Is this absolutely necessary ?


On 19 January 2016 at 21:14, 张元超 <zhangyuanchao@highgo.com> wrote:
Hi,
    Now ,i found one question about callablestatement.if i have a function whoes name containts '}',and i call it by callablestatement,there will be a 'PSQLException'. Like this:

    org.postgresql.util.PSQLException: Malformed function or procedure escape syntax at offset 19.
at org.postgresql.core.Parser.modifyJdbcCall(Parser.java:644)
at org.postgresql.jdbc2.CachedQueryCreateAction.create(CachedQueryCreateAction.java:40)
at org.postgresql.jdbc2.CachedQueryCreateAction.create(CachedQueryCreateAction.java:21)
at org.postgresql.util.LruCache.borrow(LruCache.java:94)
at org.postgresql.jdbc2.AbstractJdbc2Connection.borrowQuery(AbstractJdbc2Connection.java:106)
at org.postgresql.jdbc2.AbstractJdbc2Statement.<init>(AbstractJdbc2Statement.java:227)
at org.postgresql.jdbc3.AbstractJdbc3Statement.<init>(AbstractJdbc3Statement.java:49)
at org.postgresql.jdbc3g.AbstractJdbc3gStatement.<init>(AbstractJdbc3gStatement.java:29)
at org.postgresql.jdbc4.AbstractJdbc4Statement.<init>(AbstractJdbc4Statement.java:33)
at org.postgresql.jdbc42.AbstractJdbc42Statement.<init>(AbstractJdbc42Statement.java:27)
at org.postgresql.jdbc42.Jdbc42Statement.<init>(Jdbc42Statement.java:31)
at org.postgresql.jdbc42.Jdbc42PreparedStatement.<init>(Jdbc42PreparedStatement.java:21)
at org.postgresql.jdbc42.Jdbc42CallableStatement.<init>(Jdbc42CallableStatement.java:17)
at org.postgresql.jdbc42.Jdbc42Connection.prepareCall(Jdbc42Connection.java:46)
at org.postgresql.jdbc3.AbstractJdbc3Connection.prepareCall(AbstractJdbc3Connection.java:325)
at org.postgresql.jdbc2.AbstractJdbc2Connection.prepareCall(AbstractJdbc2Connection.java:333)

The function name i used is "test_fu}n2".Yeah,i kown that may be nobody will create a function with some name like this,but, it can be created successfully.Ok, i check the code of jdbc,i found some problem lead to the question above. The code file is org/postgresql/core/Parser.java,and row 603 to row 646,the handle of '}' .

I have no idea if it is necessary to modify it.

Re: One question about callablestatement

От
Thomas Kellerer
Дата:
张元超 schrieb am 20.01.2016 um 03:14:
> Hi,
>      Now ,i found one question about callablestatement.if i have a function whoes name containts '}',
>and i call it by callablestatement,there will be a 'PSQLException'. Like this:
>
> The function name i used is "test_fu}n2".Yeah,i kown that may be nobody will create a function with some
>name like this,but, it can be created successfully.Ok, i check the code of jdbc,i found some problem lead to
>the question above. The code file is org/postgresql/core/Parser.java,and row 603 to row 646,the handle of '}' .
>


You don't need a CallableStatement to call a function in Postgres.

What happens if you use a regular Statement and executeQuery("select \"test_fu}n2\"");