Foros del Web » Programación para mayores de 30 ;) » Java »

error Unknown column '' in 'where clause'

Estas en el tema de error Unknown column '' in 'where clause' en el foro de Java en Foros del Web. Hola, tengo un error que no comprendo, a ver si alguien me puede ayudar. Yo tengo una bbdd en mysql, con 4 tablas, una de ...
  #1 (permalink)  
Antiguo 13/04/2009, 02:55
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
error Unknown column '' in 'where clause'

Hola, tengo un error que no comprendo, a ver si alguien me puede ayudar. Yo tengo una bbdd en mysql, con 4 tablas, una de ellas es una tabla de cuentas donde uno de los campos es el nif del cliente. Al intentar dar de baja uno de los clientes, y las cuentas que tenga ese cliente también darlas de baja, me da este error. He intentado depurar errores, y al hacerlo, parece que el error está en el siguiente código (que es el método que utilizo para borrar), pero no comprendo porqué:


public ArrayList<accountsDto> ReadByNif (accountsDto accountsdto, String campo) throws SQLException
{
Statement stmt;
ResultSet rs;
Connection con = DriverManager.getConnection(url,login,password);

stmt = con.createStatement();

String orden = "SELECT * FROM ACCOUNTS WHERE NIF = '"+accountsdto.getNif()+"'";

System.out.println("Se va a ejecutar en la BBDD la orden: "+orden);

rs=stmt.executeQuery(orden);

ArrayList <accountsDto> accountsCollection = new ArrayList <accountsDto> ();

while (rs.next())
{
accountsDto account = new accountsDto();

account.setAccountnumber(rs.getInt("ACCOUNTNUMBER" ));
account.setOffice(rs.getInt("OFFICE"));
account.setNif(rs.getString("NIF"));
account.setCreationdate(rs.getString("CREATIONDATE "));
account.setAccounttype(rs.getString("ACCOUNTTYPE") );
account.setAccountkey(rs.getInt("ACCOUNTKEY"));

System.out.println ("Datos de la cuenta: Account "+account.getAccountnumber()+", Office "+
account.getOffice()+", Nif of client "+account.getNif()+", Date of Creation "+
account.getCreationdate()+", Type of account "+account.getAccounttype()+
", key of account "+account.getAccountkey());

accountsCollection.add(account);
}

con.close();
return accountsCollection;
}

Se queda en el System.out..., no llega al " rs=stmt.executeQuery(orden);". Antes de llamar a éste método, hago otra consulta en la misma tabla con un SELECT para comprobar que hay alguna cuenta con ese nif, y la consulta la hace bien, pero al llegar aquí se para, y me dá este error, no devuelve nada y me termina dando el error " java.lang.NullPointerException". Pero la consulta es correcta, ¿no es así? Y lo más raro de todo, este error se produce cuando el nif por el que consulto es con letras (ej. 01A), si es sólo numeros (ej. 0111111) no tengo error. En la base de datos el nif está definido como un campo de texto. ¿Puede alguien decirme porqué me dá este error?
Muchas gracias, y un saludo
  #2 (permalink)  
Antiguo 13/04/2009, 08:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: error Unknown column '' in 'where clause'

Tema trasladado desde MySQL.

http://www.forosdelweb.com/f21/funci...-datos-413499/
  #3 (permalink)  
Antiguo 13/04/2009, 08:21
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: error Unknown column '' in 'where clause'

Wenas

Exactamente que error te da??

Saludos.
  #4 (permalink)  
Antiguo 13/04/2009, 09:53
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: error Unknown column '' in 'where clause'

El error es "Unknown column '(mi nif)' in 'where clause'", y en la columna, el nif del cliente, que compruebo que se encuentra en la bbdd. Y el accountDto accountdto que se encuentra en el código que he puesto antes es un to o value object, con sus set y sus get, que funciona bien. Un saludo
  #5 (permalink)  
Antiguo 13/04/2009, 10:09
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: error Unknown column '' in 'where clause'

No sera por las comillas?? De todos modos por que no lo haces con preparedstatement??

Código:
String orden = "SELECT * FROM ACCOUNTS WHERE NIF = ?";
PreparedStatement ps =  con.prepareStatement(orden); 
ps.setString(1, accountsdto.getNif());
rs=ps.executeQuery();
Saludos
  #6 (permalink)  
Antiguo 14/04/2009, 07:18
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: error Unknown column '' in 'where clause'

Hola, no son las comillas ni el .createStatement, porque si la consulta la hago con un nif numérico (ej.1111), la operación se ejecuta correctamente. De hecho me ocurre algo muy raro: si el nif es un número, todo va de perlas. Si el nif contiene una letra, es cuando me dá el error, se queda antes de hacer el "rs=stmt.executeQuery(orden);". De hecho, si en la bbdd tengo dos nifs, por ej. 01 y 01A, y yo le pido que me busque el de nif = 01 para borrar ese cliente, me busca éste y me borra los dos, el que tiene la letra y el que no (cosa que tampoco quiero que pase, claro).
En la bbdd (mysql-toad) tengo definido el campo nif como text, creo que no debería darme problemas, no sé si el problema estará ahí, pero para el resto de métodos que tengo (tipo INSERT, UPDATE, READ, etc) no me da ningún problema, es únicamente en éste caso. El IDE que utilizo es eclipse, he intentado depurar para encontrar el error y lo que he visto es que me hace bien los SELECT y demás consultas que le pido, pero cuando llega al rs... en este caso, no puede entrar. Si podéis echarme un cable, os lo agradeceré.
Un saludo
  #7 (permalink)  
Antiguo 14/04/2009, 07:39
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: error Unknown column '' in 'where clause'

intenta cambiar el tipo de dato text por varchar
  #8 (permalink)  
Antiguo 14/04/2009, 09:15
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: error Unknown column '' in 'where clause'

Hola, nada, lo he cambiado y sigue el mismo error:

....
17:05:59,687 INFO [STDOUT] Se va a ejecutar en la BBDD la orden: SELECT * FROM CLIENTS WHERE NIF = '02A'
17:05:59,718 INFO [STDOUT] Se va a ejecutar de la BBDD la orden: SELECT * FROM ACCOUNTS WHERE NIF = '02A'
17:05:59,718 INFO [STDOUT] Datos de la cuenta: Account 18, Office 1111, Nif of client 02A, Date of Creation 2009-04-13 10:02:00, Type of account Cuenta Corriente, key of account 12
17:05:59,718 INFO [STDOUT] Se va a ejecutar en la BBDD la orden: SELECT * FROM ACCOUNTS WHERE NIF = 02A
17:05:59,734 ERROR [STDERR] java.sql.SQLException: Unknown column '02A' in 'where clause'
17:05:59,734 ERROR [STDERR] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:2001)
17:05:59,734 ERROR [STDERR] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:11 68)
17:05:59,734 ERROR [STDERR] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java :1279)
17:05:59,734 ERROR [STDERR] at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1225)
....

El primer SELECT en la tabla accounts lo hace bien, lo hago para ver si ese nif se encuentra en la bbdd. Y al hacer el segundo, para guardar en una lista todas las cuentas que pertenezcan a ese cliente, es cuando se fastidia. Tengo en ambos métodos la misma sentencia SELECT, así que no tengo idea de dónde está el error. Un saludo
  #9 (permalink)  
Antiguo 14/04/2009, 09:23
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: error Unknown column '' in 'where clause'

te faltan las comillas en la segunda consulta en 02A, si te fijas cuando lo hace bien se imprime esta sentencia

Se va a ejecutar de la BBDD la orden: SELECT * FROM ACCOUNTS WHERE NIF = '02A'

y cuando no, se imprime esta

Se va a ejecutar de la BBDD la orden: SELECT * FROM ACCOUNTS WHERE NIF = 02A

por eso te marca es ese error
  #10 (permalink)  
Antiguo 15/04/2009, 03:43
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: error Unknown column '' in 'where clause'

Hola, el caso es que ya lo he cambiado y me sigue saliendo el mismo error. Te mando el código del Dao cambiado:


public ArrayList<accountsDto> ReadByNif (accountsDto accountsdto, String campo) throws SQLException
{
Statement stmt;
ResultSet rs;
Connection con = DriverManager.getConnection(url,login,password);

stmt = con.createStatement();

String orden = "SELECT * FROM ACCOUNTS WHERE NIF = '"+accountsdto.getNif()+"'";

System.out.println("Se va a ejecutar en la BBDD la orden: "+orden);

rs=stmt.executeQuery(orden);

ArrayList <accountsDto> accountsCollection = new ArrayList <accountsDto> ();

while (rs.next())
{
accountsDto account = new accountsDto();

account.setAccountnumber(rs.getInt("ACCOUNTNUMBER" ));
account.setOffice(rs.getInt("OFFICE"));
account.setNif(rs.getString("NIF"));
account.setCreationdate(rs.getString("CREATIONDATE "));
account.setAccounttype(rs.getString("ACCOUNTTYPE") );
account.setAccountkey(rs.getInt("ACCOUNTKEY"));

System.out.println ("Datos de la cuenta: Account "+account.getAccountnumber()+", Office "+
account.getOffice()+", Nif of client "+account.getNif()+", Date of Creation "+
account.getCreationdate()+", Type of account "+account.getAccounttype()+
", key of account "+account.getAccountkey());

accountsCollection.add(account);
}

con.close();
return accountsCollection;
}


Y me sigue saliendo el mismo error:

...
11:36:42,671 INFO [STDOUT] Se va a ejecutar de la BBDD la orden: SELECT * FROM ACCOUNTS WHERE NIF = '02A'
11:36:42,671 INFO [STDOUT] Datos de la cuenta: Account 18, Office 1111, Nif of client 02A, Date of Creation 2009-04-13 10:02:00, Type of account Cuenta Corriente, key of account 12
11:36:42,687 INFO [STDOUT] Se va a ejecutar en la BBDD la orden: SELECT * FROM ACCOUNTS WHERE NIF = 02A
11:36:42,687 ERROR [STDERR] java.sql.SQLException: Unknown column '02A' in 'where clause'
11:36:42,687 ERROR [STDERR] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:2001)
11:36:42,687 ERROR [STDERR] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:11 68)
...

He probado a limpiar el proyecto, en la pestaña Proyect -> Clean de eclipse, pero sigue igual. Ya no sé que hacer, ni porqué me funciona con números y con letras en el nif no. Un saludo
  #11 (permalink)  
Antiguo 15/04/2009, 06:34
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: error Unknown column '' in 'where clause'

Por que le teneis tanta alergia a los preparedstatement??

Con la de lios que quitan...

En fin.

Saludos.
  #12 (permalink)  
Antiguo 15/04/2009, 07:29
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: error Unknown column '' in 'where clause'

tiene razon elAntonie, deberias usar preparedstatement, es mas limpio, organizado y legible, es mas te lo voy a hacer para que veas que no es tan dificil

Código PHP:
public ArrayList<accountsDtoReadByNif (accountsDto accountsdtoString campothrows SQLException
{
    
Statement stmt;
    
ResultSet rs;
    
Connection con DriverManager.getConnection(url,login,password);

    
stmt con.createStatement();

    
String orden "SELECT * FROM ACCOUNTS WHERE NIF = ?";
    
PreparedStatement ps =  con.prepareStatement(orden); 
    
ps.setString(1accountsdto.getNif());

    
System.out.println("Se va a ejecutar en la BBDD la orden: "+orden);

    
rs=ps.executeQuery();

    
ArrayList <accountsDtoaccountsCollection = new ArrayList <accountsDto> ();

    while (
rs.next())
    {
        
accountsDto account = new accountsDto();

        
account.setAccountnumber(rs.getInt("ACCOUNTNUMBER" ));
        
account.setOffice(rs.getInt("OFFICE"));
        
account.setNif(rs.getString("NIF"));
        
account.setCreationdate(rs.getString("CREATIONDATE "));
        
account.setAccounttype(rs.getString("ACCOUNTTYPE") );
        
account.setAccountkey(rs.getInt("ACCOUNTKEY"));

        
System.out.println ("Datos de la cuenta: Account "+account.getAccountnumber()+", Office "+
        
account.getOffice()+", Nif of client "+account.getNif()+", Date of Creation "+
        
account.getCreationdate()+", Type of account "+account.getAccounttype()+
        
", key of account "+account.getAccountkey());

        
accountsCollection.add(account);
    }

    
con.close();
    return 
accountsCollection;

Saludos
  #13 (permalink)  
Antiguo 20/04/2009, 08:12
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: error Unknown column '' in 'where clause'

Muchas gracias, no es que no quisiera usarlo, es que no quería añadir algo nuevo sin saber porqué me fallaba lo antiguo. De todos modos, por lo que he podido comprobar, no es problema de sentencias, lo que ocurre es que eclipse no me recoge los cambios que realizo en el dao. Por eso no me cogía las comillas simples, ni me funcionaba. De hecho en vez de SELECT he puesto SELOCT y nada, me sale el mismo error en la sentencia SELECT * FROM ACCOUNTS ... . Ya me pasó en otra ocasión con un folder, pero se solucionó cambiando el folder y dándole a limpiar proyecto. En este caso no funciona con esa solución, no sé si la instalación del eclipse tiene algún defecto o no, pero no lo recoge. Probaré a borrar el dao y crearlo de nuevo, como hice con el folder. De todos modos, me vendría bien saber si hay alguna manera de reciclar el programa, de limpiarlo por dentro, no sé si me entendéis, para que no dé este tipo de errores. No sé si es algo que se pueda hacer.
De todos modos, muchas gracias por todo, me habéis ayudado mucho.
Un saludo,
  #14 (permalink)  
Antiguo 21/04/2009, 01:58
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: error Unknown column '' in 'where clause'

Yo no he usado eclipse, pero en jdeveloper me ha pasado eso. Comprobe que era debido al proyecto que tenia señalado, es decir, yo tengo 3 proyectos, y estoy compilando una clase del proyecto 1, si en la ventana de proyectos, tengo señalado el proyecto 2, lo compila en el classes del proyecto2.

A ver si es 'eso' lo que te pasa.

Saludos.
  #15 (permalink)  
Antiguo 25/05/2009, 06:28
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: error Unknown column '' in 'where clause'

Hola, he intentado solucionarlo como indicas, y limpiando proyecto , borrando el fichero y volviéndolo a poner, y nada. La única solución que veo es, o bien borrarlo entero y volverlo a hacer, o descargarme de nuevo eclipse por si tiene algún defecto en la instalacion. De todos modos muchas gracias, un saludo
  #16 (permalink)  
Antiguo 25/05/2009, 09:18
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: error Unknown column '' in 'where clause'

Si te sigue saliendo:
Cita:
11:36:42,687 INFO [STDOUT] Se va a ejecutar en la BBDD la orden: SELECT * FROM ACCOUNTS WHERE NIF = 02A
Es por que estas ejecutando la sentencia sin las ' alrededor del valor 02A.
El por que lo hace es cosa de averiguar por que no estas ejecutando el código que crees que estás ejecutando, pero no es problema de Java.
S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #17 (permalink)  
Antiguo 23/09/2016, 04:13
 
Fecha de Ingreso: mayo-2015
Ubicación: barcelona
Mensajes: 1
Antigüedad: 9 años
Puntos: 0
Respuesta: error Unknown column '' in 'where clause'

Me pasó lo mismo y lo solucioné quitando los espacio. En este caso NIF=02A
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:03.