0

我正在用 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 上执行这个查询时,我没有任何错误,错误在哪里,问题在哪里?

4

2 回答 2

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的,不能被查询解析​​器解析。

请参阅 javadoc 示例String#concat

 "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 ");
于 2012-09-02T09:18:13.777 回答
0

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

你的字符串的某些部分是

...FROM proveedores_cloud t0INNER JOIN procesadores...

在末尾添加空格处理它

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

您基本上需要对所有不以逗号结尾的行执行此操作

于 2012-09-02T09:26:01.847 回答