Re: [GENERAL] Fwd: Query parameter types not recognized

Поиск
Список
Период
Сортировка
От Roberto Balarezo
Тема Re: [GENERAL] Fwd: Query parameter types not recognized
Дата
Msg-id CALN83z6LqCJ3RDOya2OiLrnTbtxtVOwzmbq_NAo7saFUJy_H5w@mail.gmail.com
обсуждение исходный текст
Ответ на Re: [GENERAL] Fwd: Query parameter types not recognized  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список pgsql-general
Hi,

The parameter defaultDueDate is a java.sql.Date object, an actual Date. When I run the query with the value in it, it works:
```sql
db=> select COALESCE(duedate, date '2017-02-01' + 1) from invoices order by duedate desc;
      coalesce       
---------------------
 2017-02-02 00:00:00
 2017-02-02 00:00:00
 2016-11-14 00:00:00
 2017-02-10 00:00:00
 2017-02-02 00:00:00
 2017-02-13 00:00:00
 2017-02-02 00:00:00
 2017-02-02 00:00:00
``` 

But when I send it as a parameter, it ignores it and seems to think the expression is of type interger.

2017-02-10 16:32 GMT-05:00 Adrian Klaver <adrian.klaver@aklaver.com>:
On 02/10/2017 07:17 AM, Roberto Balarezo wrote:
Hi, I would like to know why this is happening and some advice if there
is a way to solve this problem:

I have a query like this:

|select COALESCE(duedate, ? + 1) from invoices order by duedate desc
limit 10; |

What is the 1 in ? + 1 supposed to represent?


where ? is a query parameter. I’m using JDBC to connect to the database,
and sending parameters like this:

|query.setDate(1, defaultDueDate); |

Where defaultDueDate is a java.sql.Date object. However, when I try to
execute the query, I get this error:

|org.postgresql.util.PSQLException: ERROR: COALESCE types timestamp
without time zone and integer cannot be matched |

So what is the actual value of defaultDueDate?

Looks like it is an integer from the ERROR message.

Might want to look in the Postgres logs to see if they show anything that might help.


Why is it inferring that the type is integer, when I send it as Date??

I don't use Java, but I did find the below, don't know if it helps?:

https://jdbc.postgresql.org/documentation/94/escapes-datetime.html



When I force the type using a cast, like this:

|select COALESCE(duedate, CAST(? AS DATE) + 1) from invoices order by
duedate desc limit 10; |

I get this error:

|org.postgresql.util.PSQLException: ERROR: could not determine data type
of parameter $1 |

If I’m telling PostgreSQL that the parameter is going to be a Date, and
send through the driver a Date, why it is having trouble determining the
datatype of the parameter??
What can I do to make it work?

For reference, I’m using PostgreSQL 9.2.15 and JDBC driver 9.4.1207.jre6.

Thanks for your advice!





--
Adrian Klaver
adrian.klaver@aklaver.com

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

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Re: [GENERAL] Fwd: Query parameter types not recognized
Следующее
От: Roberto Balarezo
Дата:
Сообщение: Re: [GENERAL] Fwd: Query parameter types not recognized