【发布时间】:2014-07-30 20:51:01
【问题描述】:
我想通过 JDBC 进行这样的查询(注意它包含一些 postgis 函数):
SELECT id, name, ST_Y(location::geometry) as latitude, ST_X(location::geometry) as longitude, category_group, category
FROM pois
WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(-5.8340534 43.3581991)'), 1000000);
所以我将查询参数化为:
SELECT id, name, ST_Y(location::geometry) as latitude, ST_X(location::geometry) as longitude, category_group, category
FROM pois
WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(? ?)'), ?);
问题是执行preparedStament时找不到前2个参数,因为它们在单引号内,所以报错。
我也尝试用 \' 转义单引号但没有成功:
SELECT id, name, ST_Y(location::geometry) as latitude, ST_X(location::geometry) as longitude, category_group, category
FROM pois
WHERE ST_DWithin(location, ST_GeographyFromText(\'SRID=4326;POINT(? ?)\'), ?);
目前,作为一种解决方法,我没有绑定参数,只是将查询字符串附加到它们上,但这很容易受到 SQL 注入的影响,所以我只想知道是否有任何方法可以转义该语句参数绑定工作。
【问题讨论】:
-
它给出了什么错误?
-
@NinadPingale 原因:org.postgresql.util.PSQLException:列索引超出范围:2,列数:1。在 org.postgresql.core.v3.SimpleParameterList.bind( SimpleParameterList.java:51)
-
将其添加到您的问题中,不要在 cmets 中添加额外信息