java
  • mysql
  • jdbc
  • spatial-query
  • 2016-02-12 26 views 0 likes 
    0

    我工作的一個Java項目,在這裏我們使用它的SQL庫函數從MySQL服務器訪問和查詢。MySQL的MBRContains聲明扔MySQLExceptionError

    引發此問題的代碼是:

    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服務器版本正確的語法,靠近用戶的「選擇項ID FROM ItemPoint WHERE MBRContains((GeomFromText(手動@盒子),座標)在第2行「

    我不知道爲什麼有一個語法錯誤,因爲我立足其關閉:http://dev.mysql.com/doc/refman/5.5/en/using-spatial-indexes.html

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

    +0

    如何定義這個對象:'Polygon'? –

    回答

    1

    我能夠讓它做這個工作,而不是:

    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"); 
    
    +1

    偉大的,你能解決這個問題你的自我!不要忘記將其標記爲接受的:) –

    1

    您的問題不是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(); 
    

    注意,這可能不工作事情是這樣的。你可能需要改變一些東西,這是基本的想法。我從內存中這樣做,所以...

    +0

    這種方法現在已經搬到了語法錯誤「SET @Box = ...」的第一道防線。 –

    相關問題