簡體   English   中英

MySQL MBRContains語句引發MySQLExceptionError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM