Spring JdbcTemplate更新Postgis地理专栏

问题描述 投票:0回答:1

我正在尝试使用下面的代码更新带有经度和纬度的 Postgis 地理列

public void updateGeoLocation(String lat, String lon) {
    template.update(
            "UPDATE property set geo = ST_GeomFromText('POINT(? ?)', 4326) where id = 'b15e7a7e-3b27-4a2f-b312-33ebbed594b5'",
            lon, lat);
}

但是我遇到以下异常

org.springframework.dao.DataIntegrityViolationException:
> PreparedStatementCallback; SQL [UPDATE property set geo =
> ST_GeomFromText('POINT(? ?)', 4326) where id =
> 'b15e7a7e-3b27-4a2f-b312-33ebbed594b5']; The column index is out of
> range: 1, number of columns: 0.; nested exception is
> org.postgresql.util.PSQLException: The column index is out of range:
> 1, number of columns: 0.

我手动尝试了以下查询并且它有效,但我在使其与 JdbcTemplate 一起使用时遇到问题

update property set geo = ST_GeomFromText('POINT(-71.060316 48.432044)', 4326) where id = 'b15e7a7e-3b27-4a2f-b312-33ebbed594b5'

如何使用 JdbcTemplate 更新/插入 Postgis 地理列的经纬度?

spring postgresql postgis jdbctemplate
1个回答
0
投票

我应用了函数 ST_GeogFromText,并像这样使用它:

"ST_GeogFromText('SRID=4326;POINT(" + longitude + " " + latitude + ")')"

注意 ST_GeogFromText 和 ST_GeomFromText 之间的区别

© www.soinside.com 2019 - 2024. All rights reserved.