Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySQL MBR包含抛出MySQLExceptionError的语句_Java_Mysql_Jdbc_Spatial Query - Fatal编程技术网

Java MySQL MBR包含抛出MySQLExceptionError的语句

Java MySQL MBR包含抛出MySQLExceptionError的语句,java,mysql,jdbc,spatial-query,Java,Mysql,Jdbc,Spatial Query,我正在从事一个Java项目,我们使用它的sql库函数从MySQL服务器访问和查询 引发问题的代码是: String setBox = "SET @box = 'Polygon((" + lx + " " + ry + "," + rx + " " + ry + ","

我正在从事一个Java项目,我们使用它的sql库函数从MySQL服务器访问和查询

引发问题的代码是:

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");
第二条语句(ResultSet regionResult=…)中出现错误

我收到的错误是:

“com.mysql.jdbc.exception.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;请检查与您的mysql服务器版本相对应的手册,以了解第2行“从MBR包含((GeomFromText(@box),Coords)的ItemPoint中选择ItemID”附近用户的正确语法。”

我不确定为什么会出现语法错误,因为我是基于以下原因得出的:


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

你的问题不在于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();

请注意,这可能不是它的工作方式。您可能需要更改某些内容,这是基本想法。我是从内存中执行此操作的,因此…

您的问题不在于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();

请注意,这可能无法正常工作。您可能需要更改某些内容,这是基本的想法。我是从内存中执行此操作的,因此…

我可以通过执行以下操作使其正常工作:

String box = "Polygon((" 
                        + lx + " " + ry + ", "
                        + rx + " " + ry + ", "
                        + rx + " " + ly + ", "
                        + lx + " " + ly + ", "
                        + lx + " " + ry + "))";

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

我可以通过这样做来实现:

String box = "Polygon((" 
                        + lx + " " + ry + ", "
                        + rx + " " + ry + ", "
                        + rx + " " + ly + ", "
                        + lx + " " + ly + ", "
                        + lx + " " + ry + "))";

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

如何定义此对象:
Polygon
?如何定义此对象:
Polygon
?此方法现在已将语法错误移动到第一行“SET@box=…”。此方法现在已将语法错误移动到第一行“SET@box=…”。