0

この mysql クエリを実行しようとすると、次のエラーが発生します。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: SQL 構文にエラーがあります。'SET @r2 = GeomFromText('Polygon((1 1,5 1,5 5,1 5,1 1))'); の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。2 行目で MBROVERLAPS(@r1' を選択)

コード:

public String getoverlap(Rectangle recA, Rectangle recB){
    String result = "-1";
    String query;

    query =    
            "SET @r1 = GeomFromText(\'Polygon((1 1, 5 1,5 5,1 5,1 1))\');\n" +
            "SET @r2 = GeomFromText(\'Polygon((1 1,5 1,5 5,1 5,1 1))\');\n" +
           "select MBROVERLAPS(@r1,@r2);" ;

     System.out.println("query--:\n "+query);


     try {
        this.statement = this.connection.createStatement();
        ResultSet  rs = this.statement.executeQuery(query);
        System.out.println("kkk:" +rs.toString());

        if(rs!=null){
            result = rs.getString("MBROVERLAPS(@r1,@r2)");
        }
        else{
            System.out.println("Debug: lathos sthn getoverlap");
        }

         statement.close();
    } catch (SQLException ex) {
        System.out.println("debug: sqlEcxeption");
        Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
    }

     return result;
}

問題はどこだ?

4

1 に答える 1

1

JDBC API は一般的な SQL クライアントをエミュレートしませ。複数のステートメントを同じようにマージすることはできません。具体的には、このクエリ:

query =    
    "SET @r1 = GeomFromText(\'Polygon((1 1, 5 1,5 5,1 5,1 1))\');\n" +
    "SET @r2 = GeomFromText(\'Polygon((1 1,5 1,5 5,1 5,1 1))\');\n" +
    "select MBROVERLAPS(@r1,@r2);" ;

各ステートメントを個別に実行して、分割する必要があります。ステートメントを介して各部分を直接実行することによって示されます。

statement = connection.createStatement();
statement.executeQuery("SET @r1 = GeomFromText(\'Polygon((1 1, 5 1,5 5,1 5,1 1))\')";
statement.executeQuery("SET @r2 = GeomFromText(\'Polygon((1 1,5 1,5 5,1 5,1 1))\')");
ResultSet  rs = statement.executeQuery("SELECT MBROVERLAPS(@r1,@r2)");
System.out.println(rs.toString());

致命的な問題は、JDBC クエリ文字列に区切りのセミコロンを使用してはならないということです。

于 2013-03-30T20:28:24.770 に答える