当前位置: 首页 > 知识库问答 >
问题:

引发MySQLExceptionError的MBRContains语句

秦景同
2023-03-14
String setBox = "SET @box = 
                                'Polygon((" + lx + " " + ry + ","
                                            + rx + " " + ry + ","
                                            + lx + " " + ly + ","
                                            + rx + " " + ly + ","
                                            + lx + " " + ry + "))';\n";

ResultSet regionResult = stmt.executeQuery(setBox + 
  "SELECT ItemID FROM ItemPoint WHERE MBRContains(GeomFromText(@box), Coords);\n");

我不知道为什么会有语法错误,因为我是基于以下原因的:http://dev.mysql.com/doc/refman/5.5/en/using-spatial-indexes.html

我的MySQL服务器版本是:5.5.40-0Ubuntu0.14.04.1(Ubuntu)

共有1个答案

陆星文
2023-03-14

您的问题不是MySql是PreparedStatement。不能用它来运行两个语句,必须使用CallableStatement

对于您的问题,它将类似于:

String callString = "{ call SET @box = 'Polygon(( ? ?,
                                       ? ?,
                                       ? ?,
                                       ? ?,
                                       ? ?))'; 
                      SELECT ItemID 
                        FROM ItemPoint 
                       WHERE MBRContains(GeomFromText(@box), Coords); }";

CallableStatement callableStatement = con.prepareCall(callString);
callableStatement.setInt(1, lx);
callableStatement.setInt(2, ry);
callableStatement.setInt(3, rx);
callableStatement.setInt(4, ry);
callableStatement.setInt(5, lx);
callableStatement.setInt(6, ly);
callableStatement.setInt(7, rx);
callableStatement.setInt(8, ly);
callableStatement.setInt(9, lx);
callableStatement.setInt(10, ry);
ResultSet regionResult = callableStatement.executeQuery();

注意,这可能不是它的工作方式。你可能需要改变一些东西,这是基本的想法。我是凭记忆这么做的,所以...

 类似资料:
  • 问题内容: 我有一个表,其中有存储过程的名称。 但是在最后一步,我得到了错误 ‘@object’附近的语法不正确。 是因为类型还是什么? 这是针对SQL Server 2012 问题答案: 你不能那样做。您需要使用动态sql。就像是 :

  • 问题内容: 这个问题已经在这里有了答案 : MySQLSyntaxErrorException在“?”附近 尝试执行PreparedStatement时 (2个答案) 5年前关闭。 我使用PreparedStatements准备查询,当我使用condition参数对查询进行硬编码时,它运行良好。 但如果从setString()方法传递参数,则会抛出错误。 在错误日志中,我的查询上方看起来不错。 P

  • 考虑来自Java文档的以下代码。 根据Java文档, 在示例readFirstLineFromFile中,如果从try块和try with resources语句抛出异常,则方法readFirstLineFromFile抛出从try块抛出的异常;禁止从try with resources块引发的异常。 另一方面,也提到了 由于BufferedReader实例是在try with resource语

  • 此请求使用postgresql抛出语句超时。 由于某些原因,我无法在postgresql上增加超时。所以,我需要改进我的要求。如何改进?也许是因为没有使用?怎么做? 谢谢你的帮助。 编辑更多信息: 我在JAVA批处理中,我收到的错误消息如下: 原因:org.postgresql.util。PSQLException:错误:由于在org.postgresql.core.v3.QueryExecuto

  • 我需要创建自己的UnaryTransformer实例,该实例接受类型为Array[String]的Dataframe列,并且还应该输出相同的类型。在尝试这样做时,我在Spark版本2.1.0上遇到了ClassCastException。我做了一个样本测试来证明我的情况。 附加堆栈跟踪以供参考

  • 我从solarQube中得到了以下一种错误=“NullPointerException可能会被抛出,因为这里的“a”可以为null”。下面是该错误的简单代码示例。 类别: 然后我有一个使用上面的类作为参数的方法: 我得到了SonarQube突出显示的的错误。我只是无法理解这些语句的问题。SonarQube描述的错误描述并没有让我更清楚。我如何修复它,有人能向我解释为什么它是错误吗?