Definición de variables y establecimiento de la conexión
Ok, ahora comenzaremos a construir la aplicación, primero debemos crear nuestras clases, en donde implementaremos las reglas del negocio y además incluiremos las consultas SQL.
Partiré con la clase Persona (típico) y ahí definiré los atributos que necesito para realizar consultas con la base de datos:
- Primero el import de la biblioteca java.sql.*
Después de esto en el constructor de la clase vamos a especificar el tipo de conexión que vamos a usar (recuerden que estamos usando ODBC) y además debemos especificar cómo se llama el DSN (Data Source Name) que creamos en el ODBC (Object Data Base Conectivity).
Ojo que hay que agregar las posibles excepciones, como es el caso del ClassNotFoundException, que la puede lanzar el Class.forName y la SQL Exception que la puede lanzar en Driver Manager o el createStatement.
- Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”): indica que tipo de conexión vamos a usar (ya sabemos que usaremos ODBC a través de JDBC.
- conexion=DriverManager.getConnection(“20deoctubre”, “”, “”): permite almacenar en la variable conexión la cadena de conexión que estamos usando, y se le especifica acá que es a través del DSN que llamaos anteriormente “28deoctubre” (el que creamos en el ODBC) y las siguientes comillas (que están vacías) son para especificar el nombre de usuario y contraseña (en el caso que haya nombre de usuario y contraseña, como en este caso no hay, lo dejamos en blanco).
- conecta=conexion.createStatement(): abre la conexión entre nuestra Clase Java y la base de datos (y esa información la almacena en conecta (o sea esta variable tiene los datos de como llegar a la base de datos ahora).
Construcción de un método que realice un INSERT en la base de datos.
Ahora que tenemos los datos de la conexión podemos comenzar a utilizar SQL para agregar datos a nuestras tablas, como ya tenemos lista la clase Persona, la vamos a usar para agregar datos a una persona de la Base de datos.
Recordemos que la tabla Personas de la base de datos está conformada así:
Entonces necesitamos un formulario que nos permita registrar rut, nombre, apellido, edad, y el id de la ciudad (ojo que idCiudad es clave foránea de la tabla Ciudades, por lo que es necesario que al insertar una persona el id de la ciudad debe existir en la tabla Ciudades).
El formulario debería quedar así:
Voy a usar cuadros de texto para el RUT, nombre y apellido, y para la edad voy a usar una Lista de Selección (para así evitar la validación de si ingresa números), y para la ciudad también voy a usar lista de selección, pero en este caso voy a cargar los datos desde la base de datos, específicamente desde la tabla CIUDADES.
Para cargar las edades en la Lista de Selección (que tiene como nombre de variable: listaEdad), debemos agregar al constructor de la ventana lo siguiente:
Ahora para cargar las ciudades en la lista de ciudades voy a crear una clase nueva (similar a la de persona) llamada Ciudad, en ella crearé todos los atributos que creamos en Persona para poder hacer las consultas en la base de datos (esto de crear una clase por cada entidad del modelo de datos es sólo para tener un orden en el proyecto y no es indispensable ni obligatorio, bien podrías tener todo en una sola clase, pero esto quebrantaría un poco la filosofía de la Orientación a Objetos).
En fin, la clase Ciudad quedaría algo así:
Destaco el método getCiudades(), fíjense que es de tipo ResultSet, esto es porque decidí hacer la consulta SQL y retornar la respuesta hacia el formulario, y será el formulario el que recorra el ResultSet y vaya agregando uno por uno las ciudades a la lista de selección. (Recuerden que ResultSet es un tipo de datos que permite almacenar el resultado de una consulta SELECT a una base de datos), si es que se llega a caer por un SQLException retorna un null hacia el formulario (á continuación veremos como lo hace el formulario para llamar a este método y mostrar los datos en la lista de selección).
Ahora en el formulario, en el constructor, porque necesito que se carguen los datos al momento de desplegarse la ventana:
Se destaca en rojo: se crea una nueva instancia de la clase Ciudad (para poder llamar al método que me retorna las ciudades), luego defino un objeto de tipo ResultSet (ojo que hay que agregar el import java.sql.*; arriba) llamado “ciudades”, y le asigno el resultado de la llamada al método getCiudades(), con esto ya tengo la respuesta de la base de datos acá, sólo falta recorrer uno a uno las filas que me entregó y asignárselas a la lista de selección. Para ello utilizo un WHILE y el método next() hace que vaya recorriendo fila por fila (tupla por tupla), y dentro del While voy agregando a la lista de selección (que para mi proyecto se llama cbCiudades), ojo que agrego a la lista el código y el nombre, porque lo que me interesa tener para guardar en la persona es el código de la ciudad, el nombre se debe visualizar para hacer más fácil la selección al usuario).
Ahora, como el objetivo es realizar un INSERT en la base de datos, y ese evento lo vamos a hacer en el botón, creamos un evento para el botón en el formulario:
Y genera el siguiente evento como parte del código del formulario:
Lo primero es capturar los datos que están escritos en los cuadros de texto y listas de selección. Lo explicaré después de la siguiente imagen, donde se hace esa captura:
Lo que está en verde, es la captura desde los cuadros de texto (ojo que me saltaré todas las validaciones que se supone que tu debes hacer), el el caso del RUT como en el formulario hay dos cuadros para él (uno para los dígitos y otro para el dígito verificador) los concateno y guardo todo en una sola variable String.
Lo que está en naranjo, corresponde a la captura de la edad, y como la edad está en una lista de selección(con getSelectedItem()), pero está en formato Object, entonces lo comvierto a String (con String.valueOf) y necesito convertirlo a String porque mi objetivo final es convertirlo a número entero, y ese trabajo lo hace el Integer.parseInt, pero éste sólo recibe String como parámetro. En fin, la cosa es que con esa línea saco el número de la lista de edades y la guardo en una variable int.
lo que está en rojo, que es un poco más complicado, es para sacar el código de la ciudad, son tres pasos:
- nuevamente con getSelectedItem capturo lo que está seleccionado y lo convierto a String, acto seguido lo guardo en una variable String.
- pero el String anterior esta compuesto de “código-nombre”, y necesitamos sólo el código, entonces vamos a cortar el el String, y para ello uso la función substring (que sirve para cortar), y va a cortar desde la posición 0 (desde el primer caracter) hasta la posición donde se encuentre el “-“, y esa posición me la entrega la función “indexOf” (que busca donde está un determinado caracter y me entrega como resultado el índice que corresponde a la posición donde se encuentra)
- lo último y más fácil es convertir ese String a número entero.
Ahora en la clase persona hay que agregar el siguiente método, para poder llamarlo después desde el formulario:
Y en el formulario debemos agregar al evento del botón lo siguiente:
Esto es a continuación de la captura de datos desde los cuadros de texto y las listas de selección.
Justo andaba buscando esto.Voy a probar y cualquier cosa espero podes hablar con ested. Siendo un poco antigua la publicacion :/
ResponderBorrar:v
BorrarAUN NO LO PRUEBO PERO ME A SERVIDO DE MUCHO PARA ENTENDER OTRAS CUESTIONES GRACIAS POR TU APORTE....
ResponderBorrar