有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用java的mysql中的一个句子存在问题

我正在用java开发一个程序,其中有一些sql语句,这一句:

SQL="SELECT t0.id_proveedor_cloud as id_proveedor_cloud,";
SQL.concat("t1.id_procesador as id_procesador,");
SQL.concat("t2.id_tarea as id_tarea,");
SQL.concat("DATE_FORMAT(t2.f_ultima_ejecucion,'%d-%m-%Y %H:%i:%s') as f_ultima_ejecucion,");
SQL.concat("t3.id_esquema_asociado as id_esquema_asociado,");
SQL.concat("t3.descripcion as descripcion_esquema,");
SQL.concat("t3.cadena_conexion_sql as cadena_conexion_sql,");
SQL.concat("t3.url_portal_ccis as url_portal_ccis");
SQL.concat("FROM proveedores_cloud t0");
SQL.concat("INNER JOIN procesadores t1 ON t1.id_proveedor_cloud=t0.id_proveedor_cloud");
SQL.concat("INNER JOIN tareas t2 ON t2.id_procesador = t1.id_procesador");
SQL.concat("INNER JOIN esquemas_asociados t3 ON t3.id_proveedor_cloud=t0.id_proveedor_cloud");
SQL.concat("WHERE t0.id_proveedor_cloud =1");
SQL.concat("AND t1.activo = true");
SQL.concat("AND t2.activa = true");
SQL.concat("AND (TIMESTAMPDIFF(MINUTE,t2.f_ultima_ejecucion,CURRENT_TIMESTAMP) >= t2.iniciar_cada)");
SQL.concat("ORDER BY t0.id_proveedor_cloud,t2.orden");

当我试图用Java程序执行它时,我在INNER JOIN procesadores t1 ON t1.id_proveedor_cloud=t0.id_proveedor_cloud附近有一个错误,但是当我在Navicat上执行这个查询时,我没有任何错误,错误在哪里,问题在哪里


共 (2) 个答案

  1. # 1 楼答案

    查询中缺少空格

    举个例子

    SQL.concat("FROM proveedores_cloud t0");
    SQL.concat("INNER JOIN procesadores t1 ON t1.id_proveedor_cloud=t0.id_proveedor_cloud");
    

    这将产生以下字符串:

    FROM proveedores_cloud t0INNER JOIN procesadores t1 ON t1.id_proveedor_cloud=t0.id_proveedor_cloud

    它不是有效的SQL,并且不能被查询解析器解析

    有关String#concat,请参见javadoc示例:

     "cares".concat("s") returns "caress"
    

    http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#concat(java.lang.String

    您只需在concats的末尾添加一个空格,例如在FROM子句后面,就可以解决这个问题:

    SQL.concat("t3.url_portal_ccis as url_portal_ccis ");
    SQL.concat("FROM proveedores_cloud t0 ");
    SQL.concat("INNER JOIN procesadores t1 ON t1.id_proveedor_cloud=t0.id_proveedor_cloud ");
    SQL.concat("INNER JOIN tareas t2 ON t2.id_procesador = t1.id_procesador ");
    
  2. # 2 楼答案

    在用Java创建的字符串中缺少空格。在Navicat中,每行之间都有换行符,但在Java中构建的字符串中缺少空格

    你的绳子的一部分是

    ...FROM proveedores_cloud t0INNER JOIN procesadores...
    

    在其末端添加空格

    ...
    SQL.concat("FROM proveedores_cloud t0 ");
    ...
    

    基本上,对于所有不以逗号结尾的行,都需要这样做