0

私はいくつかのSQL文があるJavaでプログラムを開発しています。これは次のとおりです。

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 )

連結の最後、たとえば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 に答える