加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – PreparedStatement没有读取PostGIS Geography的所有参数

发布时间:2020-12-15 02:56:37 所属栏目:Java 来源:网络整理
导读:我有以下JDBC代码.请注意,我正在尝试使用PostGIS地理位置: PreparedStatement stmt = db.prepareStatement("INSERT INTO " + "source_imagery (image_path,boundary,image_time)" + " VALUES (?,ST_GeographyFromText('POLYGON((" + "? ?,? ?,? ?))'),?)");
我有以下JDBC代码.请注意,我正在尝试使用PostGIS地理位置:
PreparedStatement stmt = db.prepareStatement("INSERT INTO " +
                    "source_imagery (image_path,boundary,image_time)" +
                    " VALUES (?,ST_GeographyFromText('POLYGON((" +
                    "? ?,? ?,? ?))'),?)");

            stmt.setString(1,file.getAbsolutePath());
            stmt.setDouble(2,bounds.getY());
            stmt.setDouble(3,bounds.getX());
            ...

我在最后一行代码中得到以下异常:

org.postgresql.util.PSQLException: The column index is out of range: 3,number of columns: 2.

据我所知,它认为我只有2个参数,但是你可以看到我打算那里有10个.我不知道为什么它没有读取POLYGON中的任何参数.我知道如果我直接在数据库中使用它,这个SQL语句是有效的,但是我不知道我需要改变什么来使它在我的Java代码中工作.有任何想法吗?

解决方法

你的问题是:
'POLYGON((? ?,? ?))'

是一个SQL字符串文字,恰好包含八个问号.由于这是一个SQL字符串文字,因此其中的任何问号都不会被视为占位符.这将留下两个占位符:VALUES列表最开头的一个占位符和最后一个占位符.

你必须以其他方式构建多边形.可能有比ST_GeographyFromText更好的方法,但是,唉,我不知道它是什么,我没有在任何地方设置PostGIS.如有必要,您可以使用标准字符串争论手动构建POLYGON字符串,然后使用占位符:

VALUES (?,ST_GeographyFromText(?),?)

ST_GeographyFromText中的占位符将被视为占位符,因为它不在字符串文字中,您可以使用stmt.setString为其赋值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读