[英]MySQL MBRContains statement throwing MySQLExceptionError
我正在研究一個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服務器版本相對應的手冊,以找到'SELECTItemID FROM ItemPoint WHERE MBRContains(((GeomFromText( @box),Coords)'位於第2行“
我不確定為什么會出現語法錯誤,因為我將其設置為: http : //dev.mysql.com/doc/refman/5.5/en/using-spatial-indexes.html 。
我的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();
請注意,這可能無法正常工作。 您可能需要更改某些內容,這是基本思想。 我正在記憶中做這個,所以...
通過執行以下操作,我使其能夠工作:
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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.