Re: "could not determine data type of parameter" with timestamp

Поиск
Список
Период
Сортировка
От Rémi Aubel
Тема Re: "could not determine data type of parameter" with timestamp
Дата
Msg-id CAG2M1fdtwxEujP2xQzzZFaVS4R38Oq=_dKJ_rrBDUs1fYU3m2g@mail.gmail.com
обсуждение исходный текст
Ответ на Re: "could not determine data type of parameter" with timestamp  (Dave Cramer <pg@fastcrypt.com>)
Ответы Re: "could not determine data type of parameter" with timestamp
Re: "could not determine data type of parameter" with timestamp
Список pgsql-jdbc
Yes, ps.setNull(1, Types.TIMESTAMP) works.
But, once again, with the way my application works, when I bind the parameters, the query is already built. So, if my parameter is null, I have no way to guess its type.
I tried ps.setNull(1, Types.VARCHAR) as a fallback, and it works with a condition like "where ? is null". It does not work with a condition like "where birth_date > ?".
Maybe we could parse the query to use ps.setNull(1, Types.VARCHAR) when we have something like "? is null" (and a null bound parameter), but it seems to be weak (and a little bit dirty).
Why is the driver not able to ignore the parameter type when we just want to compare it to null?

Rémi.

Le mer. 6 déc. 2017 à 01:58, Dave Cramer <pg@fastcrypt.com> a écrit :
So ps.setNull(1, Types.TIMESTAMP);

Doesn't work ?

On 5 December 2017 at 15:42, David G. Johnston <david.g.johnston@gmail.com> wrote:
On Tue, Dec 5, 2017 at 8:11 AM, Rémi Aubel <remi.aubel@gmail.com> wrote:
Hello,

I know my problem has already been answered in this list (https://www.postgresql.org/message-id/CA%2BxsaB0EMDaNek0Oky9c17_8UX3-epWVP11%2BvTNgrAPoY2s9FA%40mail.gmail.com), but it was a long time ago and I would like to know if any other solution exists now.

​Not that I am aware.​
 
But this workaround is not really useful for me, because my application uses generated (dynamic) queries and targets multiple database types (not only PosgreSQL). So, when I know the targeted database, I do not know my parameter types anymore.

​I'd probably perform the null test in Java and pass the true/false boolean result along to the query:

SELECT * FROM my_table WHERE ?::bool;
ps.setBoolean(1, tsvar = null); //my Java is rusty but you get the idea.

That should work in any database.

David J.

--


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

Предыдущее
От: Dave Cramer
Дата:
Сообщение: Re: "could not determine data type of parameter" with timestamp
Следующее
От: Dave Cramer
Дата:
Сообщение: Re: "could not determine data type of parameter" with timestamp