On Fri, 4 Dec 2015 09:41:24 +0000
Tim Smith <randomdev4+postgres@gmail.com> wrote:
> When I use "preparedStatement.setString(5,ip);" to send values to a
> stored function, it obviously gets sent to postgres as "character
> varying".
>
> Postgres obviously complains loudly and says " Hint: No function
> matches the given name and argument types. You might need to add
> explicit type casts.".
>
> What is the appropriate workaround ?
You can define param 5 as varchar in your query, as Rob suggests:
CREATE FUNCTION some_function(int, int, int, int, int, varchar) ...
Then cast the 5th parameter to INET within your function.
You can also cast the value in your SQL.
sql = "SELECT some_function($, $, $, $, $::INET)"; ...
You could also create an Inet class in Java and implement the
SQLData interface, then use setObject() instead of setString().
It doesn't appear as if anyone has done this yet, but it would
be nice if it were incluced in the JDBC driver.
The first answer is probably best for stored procedures, as it
simplifies things down the road. The second solution is more
universal, as it works for non-function-calling SQL as well.
The third solution is probably _really_ the correct one, from
a pedantic standpoint, but it's a bit more work to implement.
--
Bill Moran