我试图找到这个错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个 SQL语法错误;查看与您的手册相对应的手册 MySQL服务器版本,用于在'%ORDER BY附近使用正确的语法 第1行的t1.nombre_cuenta ASC'
它在哪里?非常感谢:
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;
}
答案 0 :(得分:3)
它位于" AND t1.nombre_cuenta LIKE %" +
我还建议您在将preparestatement
发布到野外之前了解{{1}}的工作方式。
答案 1 :(得分:1)
就在这里:
...
AND t1.nombre_cuenta LIKE %" + <---------- It is here
" ORDER BY t1.nombre_cuenta ASC
...
您必须在%
之后添加要匹配的字符串,并且必须引用类似:Like '%somevalue'
的内容。
答案 2 :(得分:0)
首先你的%应该是'%'
" AND t1.nombre_cuenta LIKE '%'" +
答案 3 :(得分:0)
查看pattern matching上的文档。
更改
“AND t1.nombre_cuenta LIKE%”+
到
“AND t1.nombre_cuenta LIKE'%'”+
我也是第二个@ podiluska建议在你的查询中使用绑定变量。