Entendido, vamos por partes.
int edad tiene un valor inicial 0 (independiente de si le pasas valor o no) porque
Cita: private DatosPersonales datosPersonales = new DatosPersonales();
Los atributos de clase se inicializan automáticamente, int a 0, String a "", objetos a null...
Con respecto al error de Integer en el catch, como te decía en mi nota anterior, si tú tienes un Integer null y tratas de convertirlo en int, da error, y eso es lo que pasa en
Cita: insertar.setInt(6, datosPersonales.getEdad());
Tienes dos opciones, darle valor 0 a edad para que no sea nulo o usar setNull si estás especialmente interesado en pasarle un valor null a la BDDDD, pero primero necesitas comprobar que realmente es null.
Del enlace que te puse
Cita: // Does the equivalient of stmt.setInt(col, i) but preserves nullness.
protected static void setInt(PreparedStatement stmt, int col, Integer i)
throws SQLException
{
if (i == null)
stmt.setNull(col, java.sql.Types.INTEGER);
else
stmt.setInt(col, i);
}
http://download.oracle.com/javase/1....8int,%20int%29
Lo que podrías probar es a declarar en tu clase lo mismo que hacías con los int
private Integer numExpediente = 0; aunque me parece que te lo sobreescribirá con un null.