1

私はこの間違いを見つけようとしています:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL構文にエラーがあります。1行目の「%ORDER BY t1.nombre_cuenta ASC」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

それはどこにある?。本当にありがとう:

public Tdatoscuentas[] consultarCuentas(int id_tipo_cuenta){  //Acabar método para login

    Tdatoscuentas[] params = null; 

    try {
        this.conexion=conectar();
        System.out.println("Vamos a usar el id tipo cuenta:"+id_tipo_cuenta);
        int id_tipo_cuenta_padre=id_tipo_cuenta-1;
        //System.out.println();

        SQL="SELECT t1.id_cuenta as id_cuenta,"+     
                "t1.n_cuenta as n_cuenta,"+
           "SUBSTRING_INDEX(t1.n_cuenta,'.',"+id_tipo_cuenta_padre+") as n_cuenta_padre,"+
           "t1.nombre_cuenta as nombre,"+         
           "(SELECT tt1.cif"+
           "  FROM cuentas_rs tt1"+
            " WHERE tt1.id_cuenta = t1.id_cuenta"+
            " ORDER BY tt1.f_inicio DESC "+
            " LIMIT 1) as cif,"+                          
            "(SELECT tt2.porcentaje "+
            " FROM impuestos tt2"+
            " WHERE tt2.id_pais = (SELECT tt1.cif"+
            "                     FROM cuentas_rs tt1"+
            "                     WHERE tt1.id_cuenta = t1.id_cuenta"+
            "                     ORDER BY tt1.f_inicio DESC"+
            "                     LIMIT 1)"+
            " ORDER BY tt2.f_inicio DESC "+
            "LIMIT 1)  as impuesto,"+
           "t1.descuento as descuento,"+      
           "t1.id_tipo_cuenta as nivel,"+          
           "t1.borrado  as borrado,"+        
           "t1.cod_cliente as cod_cliente "+     
           "FROM cuentas t1 "+
           "LEFT OUTER JOIN cuentas_rs t2 ON t2.id_cuenta = t1.id_cuenta"+ 
           " WHERE t1.id_esquema_asociado = 1"+  
           " AND t1.id_proveedor_cloud = 1"+
           " AND SUBSTRING(t1.n_cuenta,1,LENGTH(001.00001))"+
           " AND t1.id_tipo_cuenta =("+id_tipo_cuenta+")"+
           " AND t1.borrado = false"+         
           " AND t1.nombre_cuenta LIKE %" +         
           " ORDER BY t1.nombre_cuenta ASC";

        System.out.println("La consulta de SQL para consultar Cuentas es:"+SQL);
        this.pstm     = this.conexion.prepareStatement(SQL);

        this.rs =  pstm.executeQuery();

        this.rs.last(); 
        int numRows = this.rs.getRow(); 
        this.rs.beforeFirst();
        System.out.println("Vamos a hacer:"+numRows);
        params = new Tdatoscuentas[numRows];

        int i=0;
         while(this.rs.next()){
             params[i] = new Tdatoscuentas();
                params[i].setId_cuenta(this.rs.getInt("id_cuenta"));
                params[i].setN_cuenta(this.rs.getString("n_cuenta"));
                params[i].setN_cuenta_padre(this.rs.getString("n_cuenta_padre"));
                params[i].setNombre_cuenta(this.rs.getString("nombre"));
                params[i].setCif(this.rs.getString("cif"));
                params[i].setImpuesto(this.rs.getDouble("impuesto"));
                params[i].setDescuento(this.rs.getDouble("descuento"));
                params[i].setNivel(this.rs.getInt("nivel"));
                params[i].setBorrado(this.rs.getBoolean("borrado"));
                params[i].setCod_cliente(this.rs.getString("cod_cliente"));

            i++;        

            }
         System.out.println("params tiene una long de"+params.length);
         return params;  
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return params;  

}
4

4 に答える 4

3

それは列に並んでいます" AND t1.nombre_cuenta LIKE %" +

preparestatementまた、これを公開する前に、がどのように機能するように設計されているかを確認することをお勧めします。

于 2012-10-09T08:46:02.637 に答える
1

ここにあるよ:

...
AND t1.nombre_cuenta LIKE %" +  <---------- It is here       
           " ORDER BY t1.nombre_cuenta ASC
...

の後に一致する文字列を追加する%必要があり、次のように引用符で囲む必要がありますLike '%somevalue'

于 2012-10-09T08:46:29.923 に答える
0

パターンマッチングに関するドキュメントをご覧ください。

変化する

"AND t1.nombre_cuenta LIKE%" +

の中へ

"AND t1.nombre_cuenta LIKE'%'" +

また、クエリでバインド変数を使用することを検討する@podiluskaの提案を2番目に示します。

于 2012-10-09T08:49:46.463 に答える
0

まず、%は次のようになります'%'

" AND t1.nombre_cuenta LIKE '%'" +
于 2012-10-09T08:48:01.143 に答える