Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

La Columna no puede ser nula

Estas en el tema de La Columna no puede ser nula en el foro de Mysql en Foros del Web. Hola, Tengo unas tablas que son las siguientes; TIPO(IdTipo,Nombre); MODELO(IdModelo,Nombre,Descripcion,Obsoleto) VERSION(IdVersion,Nombre) COMPONENTE(IdComponente,IdTipo,Nombre,Descripcion, IdVersion,IdModelo,Obsoleto) A la hora de rellenar un formulario, tengo que recoger los datos ...
  #1 (permalink)  
Antiguo 20/07/2011, 04:04
 
Fecha de Ingreso: junio-2011
Mensajes: 21
Antigüedad: 12 años, 10 meses
Puntos: 1
Pregunta La Columna no puede ser nula

Hola,
Tengo unas tablas que son las siguientes;
TIPO(IdTipo,Nombre);
MODELO(IdModelo,Nombre,Descripcion,Obsoleto)
VERSION(IdVersion,Nombre)
COMPONENTE(IdComponente,IdTipo,Nombre,Descripcion, IdVersion,IdModelo,Obsoleto)

A la hora de rellenar un formulario, tengo que recoger los datos del componente y añadirlos en la base de datos, de tal forma que tengo por un lado una clase Componente que muestra con una serie de métodos cada uno de los campos; y por otro lado tengo un métdo AñadirComponente(Componente componente)

Para insertar hago la siguiente consulta:

st.executeUpdate("insert into componente(IdTipo,Nombre,Descripcion,IdVersion,IdM odelo,Obsoleto) values((select IdTipo from tipo where Nombre='"+componente.getTipo()+"'),'"+componente.g etNombre()+"','"+componente.getDescripcion()+"',(s elect IdVersion from version where Nombre='"+componente.getTipo()+"'),(select IdModelo from modelo where Nombre='"+componente.getModelo()+"'),0)", Statement.RETURN_GENERATED_KEYS);

Me salta una excepcion SQLException en la que me dice que la columna IdTipo no puede ser nula.

¿Qué estoy haciendo mal?

gracias de antemano.
  #2 (permalink)  
Antiguo 20/07/2011, 05:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: La Columna no puede ser nula

Bueno, este es uno de esos casos por los que se recomienda (y es regla del Foro) no poner código de programación: Este código está escondiendo el error mezclado entre las variables y la sintaxis del lenguaje que usas.
Básicamente es simple: El campo que te rae problemas o es PK en su tabla o es FK, está declarado como NOT NULL y no tiene valor por default. El problema es que para ver dónde está el error hay que reescribir la sentencia de modo de ver los campos un poco mejor:

Código MySQL:
Ver original
  1. insert into componente(
  2.   IdTipo,
  3.   Nombre,
  4.   Descripcion,
  5.   IdVersion,
  6.   IdModelo,
  7.   Obsoleto)
  8.   (select IdTipo from tipo where Nombre='"+componente.getTipo()+"'),
  9.   '"+componente.getNombre()+"',
  10.   '"+componente.getDescripcion()+"',
  11.   (select IdVersion from version where Nombre='"+componente.getTipo()+"'),
  12.   (select IdModelo from modelo where Nombre='"+componente.getModelo()+"'),
  13.   0)
Puesto de este modo podemos ver que la cantidad de campos a ingresar y la cantidad de datos es la misma, pero...
Estás usando subconsultas para obtener los datos directamente, sin verificar si los valores devueltos son válidos, y esto puede suceder si esas variables no contienen datos válidos en su tabla origen...
Es decir, estás usando componente.getTipo() y componente.getModelo(), pero "realmente contienen datos que devuelvan algo?
Lo mejor sería que hagas lo que siempre aconsejamos: captura la consulta creada ANTES de ejecutarse, cuando ya estén los valores reales, y pruébala en alguna interfase de tipo phpMyAdmin, MySQL Workbench, Navicat o algo así. De ese modo sabrás si realmente está devolviendo algo, porque el campo idTipo está llegando NULLL.

¿se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 20/07/2011, 05:36
 
Fecha de Ingreso: junio-2011
Mensajes: 21
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: La Columna no puede ser nula

Lo primero muchas gracias por contestar,
llevas razón los métodos que estoy invocando no están inicializados con ningún valor por lo que le pasa uno null y en mi base de datos no puede haber campos nulos en las tablas.

Estoy intentando arreglar el error pero tampoco sé muy bien como hacerlo.
Cuando relleno un formulario se tienen que almacenar todos los datos del componente pero esos datos están relacionados con otras tablas entonces por eso hago la subconsulta pero a la hora de implementar los métodos no sé muy bien...

El código de la consulta no lo separo para visualizarlo mejor puesto que es una cadena de tipo String en la que si hago saltos de línea el programa NetBeans me detecta problemas.

un saludo, y gracias de nuevo

Etiquetas: sql
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 06:37.