jueves, 19 de noviembre de 2009

Java con acceso a base de datos SQL Server 2008 (Parte IV)

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.*

image 

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.

image

  • 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í:

image

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í:

image

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:

image

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í:

image

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:

image

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:

image

 

Y genera el siguiente evento como parte del código del formulario:

image

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:

image

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:

  1. nuevamente con getSelectedItem capturo lo que está seleccionado y lo convierto a String, acto seguido lo guardo en una variable String.
  2. 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)
  3. 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:

image

Y en el formulario debemos agregar al evento del botón lo siguiente:

image

Esto es a continuación de la captura de datos desde los cuadros de texto y las listas de selección.

sábado, 7 de noviembre de 2009

Java con acceso a base de datos SQL Server 2008 (Parte III)

Creación de una aplicación en Java

Para nuestro proyecto Java usaremos Netbeans 6.7.1

image

Lo primero es crear un nuevo proyecto Java.

image

seleccionamos categoría: Java, Proyecto: Aplicación (si tienes tu NetBeans en inglés debería decir Java Application (deberías considerar descargar la versión en español).

image

A continuación deberás colocar un nombre para tu proyecto (por defecto el nombre del proyecto es JavaApplicationXX, donde XX es el número de proyecto empezando del 1 y correlativamente ascendiente de uno en uno).

Puedes cambiar también la carpeta de destino, esto se refiere al lugar donde quedará guardado tu proyecto (por defecto es en mis documentos/NetBeans Projects). El proyecto queda almacenado en una carpeta dentro de NetBeans Projects que tiene el mismo nombre del proyecto. Por último “Terminar”

image

Después de esto aparecerá la la primera clase del proyecto (que es la clase principal o MAIN), por el momento la dejaremos tal cual.

image

Configurar el proyecto antes de comenzar.

Para que nuestro proyecto quede ordenado, es imprescindible realizar una separación u orden delos “package” de esta forma podemos agrupar en un Package todas las clases que contienen las reglas del negocio, en otro todas las clases del entorno visual, y así, sucesivamente.

Para ello en el Explorador de Proyectos, en el Paquete de fuentes debes agregar tantos “paquetes como grupos desees tener. (si no vez el explorador de proyectos en tu proyecto, tal vez porque lo cerraste por error o porque se te escondió sin querer, debes presionar CTRL+1).

Para agregar un paquete basta con presionar sobre el paquete de fuentes, con el botón derecho del Mouse y seleccionar Nuevo y luego Paquete Java.

image

Con esto te aparecerá una ventana donde debes poner el nombre al nuevo paquete, por ejemplo “misClases”.La ubicación es en el “Paquete de Fuentes” y el proyecto obviamente debe ser el proyecto actual donde estas trabajando.

image

Te va a aparecer después de esto en el árbol del proyecto el nuevo paquete:

image

Cada paquete contendrá todas las clases que necesites (obviamente para que ello ocurra debes agregar una clase a un paquete).

Debes repetir estos pasos por cada paquete que quieras crear.

Cómo agregar clases a un paquete.

Para esto es tan simple como presionar con el botón derecho del mouse sobre el paquete al cual deseas agregar una clase, y seleccionas: Nuevo, y luego Clase java.

image

De inmediato te preguntará como se llama la clase, le pones un nombre significativo según tu diseño, y le das a  Terminar:

image

Después de eso te va a generar el siguiente código Java:

image

martes, 3 de noviembre de 2009

Java con acceso a base de datos SQL Server 2008 (Parte II)

En este tutorial usaremos la conexión JDBC ODBC (existen otras formas de conexión adicional que no veremos aun).

Entonces lo que debemos hacer antes de comenzar a programar es crear un ODBC, y eso se hace en el Administrador de ODBC de tu sistema operativo Windows, para llegar a el:

  • Si tienes Windows XP: en el panel de control… herramientas administrativas… ODBC.
  • Si tienes Windows Vista o Windows 7, lo más simple es: botón de inicio y escribir en el cuadro de búsqueda “ODBC” y te lleva directo.

ODBC (Object Data Base Connectivity) Objeto de Conectividad con Bases de Datos, es una aplicación que viene incluida en el sistema operativo Windows y permite, como su nombre lo dice, realizar conectividad de cualquier cosa con una base de datos, por ejemplo, permite obtener datos de una base de datos y usarla en Excel, Word, Access, agenda telefónica, Outlook, etc.. Nosotros la usaremos para conectar una aplicación Java con una Base de Datos SQL Server.

Para ello debes ir al panel de control de tu computador, seleccionar herramientas administrativas y luego ODBC. En este ODBC vamos a crear un DSN (Data Source Name) o nombre de origen de datos, el que contendrá toda la información referente a la base de datos que queremos acceder (es una especie de acceso directo).

clip_image002

image

Primero seleccionas Agregar.

image

Luego buscas el controlador de SQL Server (obviamente si vas a conectarte a otra base de datos debes elegir el controlador correspondiente).

clip_image002[4]

Escribes el nombre del DSN (es arbitrario, puede ser cualquier nombre).

Y seleccionas el Servidor de base de datos (que debería ser el mismo de tu Computador). Si no te aparece en la lista de selección lo puedes escribir.

clip_image002[6]

Le das siguiente y siguiente, y cuando llegues a esta ventana:

Debes tiquear el cuadro de selección y seleccionar la base de datos que creaste anteriormente en SQL Server Management Studio.

Luego Siguiente, siguiente

 

Y estamos listos con el ODBC. Debes recordar el nombre que le pusiste porque lo vamos a usar cuando programemos la aplicación JAVA

Java con acceso a base de datos SQL Server 2008 (Parte I)

En esta primera entrega vamos a crear la base de datos con SQL Server 2008 Express.

para esto debes tener instalado el motor de base de datos y el administrador visual (SQL Server Management Studio Express) generalmente si haces la instalación completa viene con ambos (motos de base de datos y administrador visual), si es que estás instalando la versión 2008, en la versión 2005 vienen por separado.

Primero debes ingresar al motor de base de datos a través de SQL Server Management Studio Express.

image Lo único que debes cambiar acá es el nombre del servidor, el que debería ser el mismo nombre de tu Computador\sqlexpress. Lo demás se mantiene igual y luego le das a “Conectar”
clip_image002

Luego en el explorador de objetos seleccionas la carpeta base de datos y con el botón derecho del mouse te aparecerá el menú contextual y debes elegir la opción “Nueva base de datos”.

image

Después de esto te aparecerá una ventana que te pregunta el nombre de la base de datos, sólo debes agregar el nombre que quieras y le das a “Aceptar”

clip_image002[4]

Después de esto, puedes comenzar a crear tablas, en el explorador de objetos seleccionas con el botón derecho del mouse sobre la carpeta tablas, y seleccionas “nueva tabla…”

clip_image002[6]

Luego debes escribir el nombre de cada columna, especificar el tipo de datos, y decidir si va a permitir valores nulos. Para establecer la clave primaria solo basta con seleccionar el campo o los campos (si es que es clave compuesta) y pinchar en la llave amarilla que está en la barra de herramientas.

image

Si necesitas hacer una clave compuesta debes seleccionar cada nombre de columna con le mouse + ctrl y haces clic en cada una. (la tecla CTRL presionada y vas pinchando cada nombre de columna)

Al presionar GUARDAR te va a preguntar cómo se llama la tabla, le pones un nombre y listo, ya tienes tu primera tabla.

Para hacer relaciones entre tablas debes ir a la carpeta diagramas de la base de datos (del explorador de objetos) con el botón derecho seleccionas “nuevo diagrama” (la primera vez te va a aparecer una pregunta con dos alternativas, debes seleccionar “SI”)

image

Para hacer la relación debes primero asegurarte de que en la tabla correspondiente esté creado un atributo que se llame igual que el atributo que es clave primaria en la otra tabla, en la figura de arriba, idCiudad es primaria de Ciudades, y debe estar idCiudad en Personas. Luego con el mouse pinchas idCiudad de Ciudades y sin soltarlo lo arrastras hacia idCiudad de Personas, ahí lo sueltas y te va a hacer unas preguntas, debería aparecer idCiudad de ciudades y idCiudad de Personas, si es así le das aceptar, si no te aparece así cancela y repite el proceso, si no te resulta quiere decir que el nombre no es exactamente igual o que el tipo de dato está diferente en ambas tablas (debe ser el mismo tipo). Con lo que acabamos de hacer creamos una relación entre ciudades y personas y creamos la clave foránea idCiudad en la tabla Personas.