Geometric types can be entered in several ways.
In the first form, the parameters ? are not replaced by values, as they are literal parts of a string. Thus, 0 parameters are expected ...
In the second form without single quotes, your options ? are replaced, but ((18.9750,72.8258), 5) interpreted as a row type that does not work with circle() .
You are trying to call the circle() function, which takes point and a double precision ("center and radius for circle"). These are valid syntax options:
SELECT circle '((18.9750,72.8258), 5)' AS cast_literal ' <(18.9750,72.82580),5>'::circle AS cast_literal2 , circle(point '(18.9750,72.8258)', '5') AS literal_point_n_radius , circle(point(18.9750,72.8258), '5') AS point_n_literal_radius , circle(point(18.9750,72.8258), 5) AS point_n_radius
SQL script.
Casting to ::text is just to clear the displayed screen in SQL script
In your case, to provide numeric values (rather than a string literal), use the latter form and it should work:
SELECT addressid, geocode FROM maddress WHERE geocode::point <@ circle(point(?,?), ?);
If wso2dss (with which I have no experience) does not accept functions, you should use one of the first two forms and provide the single parameter as a string literal:
SELECT addressid, geocode FROM maddress WHERE geocode::point <@ circle ?;
... where the parameter is a concatenated literal, as shown above.
You can let Postgres concatenate and still pass in three numerical values:
SELECT addressid, geocode FROM maddress WHERE geocode::point <@ ('(('::text || ? || ',' || ? || '),' || ? || ')')::circle;