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 IdTipo,
Nombre,
Descripcion,
IdVersion,
IdModelo,
Obsoleto)
'"+componente.getNombre()+"',
'"+componente.getDescripcion()+"',
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?