Solución propuesta para este ejercicio
ErrorSQL
Se trata de una clase muy sencilla, ya que solo queremos personalizar el error, de forma que bastara con:
Conexión
Se trata de organizar un poco lo que vimos anteriormente
La parte visible se compone de todas las constantes necesarias, el constructor y los dos métodos
En getConexion, comprueba se ya existe la conexión, para devolverla sin más, y si no existe, entonces llama al método abrir conexión, y se guarda la conexión abierta, antes de devolverla; asi la siguiente vez, ya la tendrá abierta y la devolverá directamente
En método closeConexion se asegura que exista el objeto conexión, y que este abierto, si es así, la cierra, y a continuación, deja a null la variable para que el método getConexion funcione correctamente si lo llaman.
Por último, el método abrirConexion es muy semejante al escrito anteriormente, pero interceptando los errores, para devolverlo como ErrorSQL
ProcesarClientes
Esta es la clase de arranque, empezamos definiendo los literales y las variables que vamos a necesitar
Preparamos ordenes SQL para leer la tabla de Clientes, para leer un registro de Provincia y para grabar un registro de Provincia. Estos dos últimos con “?” para poder sustituir luego
A continuación cargamos variables y hacemos el preproceso
Abrimos Scanner sobre la consola para poder pedir datos (28), solicitamos una conexión (34), cargamos los PreparedStatement para leer provincias e insertarlas (35,36) y realizamos el SELECT sobre clientes consiguiendo el ResultSet (39,41)
Siguiente paso. Bucle de lectura/proceso
Toda la lectura la hacemos dentro del bucle while que esta entre 50 y 66, y para cada registro, extraemos el id_provincia (51, el nombre(52) y la población(53) para facilitarlo como información, al pedir la provincia. La línea 64, solo sirve para comprobar que todo funciona.
En la line 55 utilizamos el método verProvincia al que le pasamos el id_provincia y devolverá true si existe, y false si no existe
Si la prueba devuelve false, llamamos al método actualizarProvincia que pide los datos por teclado y realiza un insert en la BBDD
El párrafo que va de la 60 a la 66 utiliza la cláusula finally para cerrar la conexión a la BBDD
A continuación el método verProvincia
Le añade el id_provincia al PreparedStatement que ya tenía (77) y lanza la query; si lo encuentra, la pregunta isBeforeFirst le dará true, por lo que modificara el boleano y lo retornara
Por ultimo para realizar la actualización, tenemos este método
En las líneas 98 a 102, realiza el dialogo para la petición de información
En las líneas 105 a 107 prepara la orden de Insert y en la 108 hacemos el Insert.
Notas:
En las líneas 81 y 109 no podemos cerrar el PreparedStatement, a menos que queramos repetir la orden de las líneas 35 y 36
No vamos cerrando los objetos de forma explícita, porque cuando cerramos la base de datos, automáticamente se cierran todos los objetos que cuelgan de esa conexión.