PreparedStatement并未读取我的PostGIS Geography的所有参数

如何解决PreparedStatement并未读取我的PostGIS Geography的所有参数

|| 我有以下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个参数,但是您可以看到我打算有2个参数。我不确定为什么它不读取
polyGON
中的任何参数。我知道,如果我直接在数据库中使用此sql语句,它将起作用,但是我不确定为使它在Java代码中起作用而必须更改的内容。有任何想法吗?     

解决方法

        您的问题是这样的:
\'POLYGON((? ?,? ?,? ?))\'
是一个SQL字符串文字,恰好包含八个问号。由于这是SQL字符串文字,因此其中的任何问号均不视为占位符。这给您留下了两个占位符:一个在
VALUES
列表的开头,另一个在末尾。 您将不得不以其他方式构建多边形。可能有比ѭ5更好的方法,但是,las,我不知道它是什么,而且我也没有在任何地方设置PostGIS。如有必要,您可以使用标准字符串处理来手动构建POLYGON字符串,然后为其使用占位符:
VALUES (?,ST_GeographyFromText(?),?)
ST_GeographyFromText
内的占位符将被视为占位符,因为它不在字符串文字中,您可以使用
stmt.setString
为其提供值。     ,        由于mu正确地表示的太短,问题在于在引号内无法识别占位符。 如果无法在Java中构建整个字符串(例如,在我看来太过侵入),则可以通过将占位符移到文字之外然后使用PgSQL字符串连接运算符来解决此问题,如下所示:
ST_GeographyFromText(\'SRID=4326;POINT(\' || ? || \' \' || ? || \')\')
您的解决方案是:
ST_GeographyFromText(\'POLYGON((\' || ? || \' \' || ? || \',\' || ? || \' \' || ? ||
    \',\' || ? || \' \' || ? || \',\' || ? || \'\' || ? || \'))\')
不太可读,但是可以用...     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?