我尝试运行此 mysql 查询,但出现此错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @r2 = GeomFromText('Polygon((1 1,5 1,5 5,1 5,1 1))'); select MBROVERLAPS(@r1' at line 2
代码:
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;
}
问题出在哪里?
最佳答案
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 查询字符串中使用分号分隔。
关于java - 使用 MBROVERLAP 在 Java 中进行 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721986/