Java & SQL
Fusionando Java con SQL puedes hacer muchas cosas, entre ellas funcionalidades básicas como es el almacenamiento y procesamiento de datos. Aquí te mostraremos UNICA y EXCLUSIVAMENTE los procesos más importantes que relacionan Java con SQL Server. Recordar que antes de aplicar alguno de los pasos indicados deberá aceptar nuestros Términos de Uso.
1. Conectando Java con SQL Server
Si estás pensando en mejorar tu capacidad de almacenamiento para una aplicación personal con tu aplicación Java puedes conectarte a SQL Server y dejar que el mismo haga su trabajo, almacenar y proteger tu información ante todo. Para la conexión tu sistema a SQL Server (en cualquiera de sus versiones), solo tienes que seguir los pasos que indicaremos posteriormente y ya estarás mezclando tu aplicación con esta grandiosa herramienta.
1. Descargar y Descomprimir el JAR del Driver de SQL Server para poder realizar la conexión.
Puedes descargarlo en el siguiente link -----> Driver SQL Server
2. Creamos un proyecto en el IDE que utilizamos, en nuestros ejemplos utilizaremos NetBeans IDE 6.7.1.
a) File
b) New Project
Seguimos los siguientes pasos para crear el proyecto:
En "Categories" seleccionamos Java y en el panel izquierdo "Java Application"
Hacemos clic en Next

Como nombre de proyecto ponemos "SQL&Java"
Dejamos todo lo otro igual y hacemos clic en "Finish"

3. Seguimos los siguientes pasos para crear la librería del IDE donde guardaremos nuestro JAR del Driver SQL.
Hacemos clic en Tools, luego en Libraries

En la siguiente pantalla, hacemos clic en New Library...

Le ponemos como nombre: "SQLDriver" -- SIN ESPACIOS
Hacemos clic en OK para completar

Seleccionamos la librería creada y hacemos clic en Add JAR/Folfer...

Localizamos la carpeta que contiene el archivo .JAR (la descargada en el primer paso)
Después de tener la carpeta: "Microsoft SQL Server JDBC Driver" ubicada, seguimos la siguiente ruta:
Microsoft SQL Server JDBC Driver/sqljdbc_2.0/enu/sqljdbc4
Hacemos clic en Add JAR/Folfer

4. Seguimos los pasos para agregar la librería creada a nuestro proyecto
Vamos a la seccion "Projects" y ubicamos nuestro proyecto.
Expandimos, hacemos clic derecho sobre "Libraries" y luego clic en "Add Library..."

Ubicamos la librería creada anteriormente y hacemos clic en Add Library

Si creaste el proyecto con el nombre que indicamos en el paso No. 2 entonces puedes descargar este código fuente y debes copiarlo en la carpeta de tu proyecto que se encuentra dentro de My Documents/NetBeansProjects - Mis Documentos/NetBeansProjects. Cuando estes dentro de tu carpeta de proyecto la cual debe llamarse “ SQL&Java”, entonces ingresa a la carpeta llamada “ src”, luego a la carpeta “sqljava”, copiar ahí el archivo “Main.java” que descargaste y sustituir por el que ya existía.
Hacer clic en link para descargar código fuente: Main.rar
**Se comprimio el archivo para poder realizar la descarga, ya que el sistema no reconoce la extensión .java
favor descomprimir y luego realizar pasos indicados anteriormente
Con esto tienes lista tu conexión a SQL Server.
NOTA IMPORTANTE:
La conexión creada tiene la facilidad de que la puedes utilizar en cualquier clase de tu proyecto, solo instanciándola, preferiblemente como variable general.
*Agregar una nueva clase al proyecto “sqljava”, haciendo clic sobre el proyecto, clic en “New File” y luego “Java Class”, ponerle como nombre: “probarConexion”, completar el código como se muestra a continuación.
package sqljava;
import java.sql.*;
public class probarConexion {
Main Conexion;
Statement Query;
ResultSet Resultado;
public void traerDatos()
{
Conexion = new Main();
Conexion.Conectar();
Query = Conexion.Sentencias();
try {
Resultado = Query.executeQuery(“SELECT * FROM <nombre de tabla>”);
while(Resultado.next())
{ System.out.println(Resultado.getString("<nombre del campo>")); }
/*Sustituir lo que esta en rojo por el nombre de alguna tabla y campo en la tabla que esten en la
base de datos que indicamos en la conexión realizada anteriormente */
} catch(SQLException e) {System.out.println(e.getMessage());}
}
}
**La línea de código: System.out.println(Resultado.getString("<nombre del campo>"));
puede repetirse cuantas veces se desee, siempre y cuando pongamos nombres de campos diferentes.
la parte getString, puede variar dependiendo del tipo de dato que estamos tomando de base de datos.
De igual manera se puede almacenar el resultado que se obteniene en una variable. El contenido del
CAMPO que estemos recibiendo, debe coincidir en TIPO DE DATO con el TIPO DE DATO de la VARIABLE.
ALGUNOS USOS PRACTICOS:
Variable = Resultado.getString("<nombre del campo>");
Variable = Resultado.getInt("<nombre del campo>");
Variable = Resultado.getFloat("<nombre del campo>");
Variable = Resultado.getDouble("<nombre del campo>");
System.out.println(Resultado.getString("<nombre del campo>"));
System.out.println(Resultado.getInt("<nombre del campo>"));
System.out.println(Resultado.getFloat("<nombre del campo>"));
System.out.println(Resultado.getDouble("<nombre del campo>"));
LISTO!
2. Insertar datos desde Java a SQL Server
Si tenemos una aplicación que requiere insertar datos en tablas de SQL Server, entonces seguir estos pasos será de mucha ayuda y tendras todos tus datos guardados en Base de Datos. Favor seguir detenidamente estos pasos.
1. Tener instalado SQL Server 2008, si no lo tienes instalado, consigue el instalador y luego visita: Instalación SQL Server 2008 para ver la guía de instalación.
2. Después de instalar y configurar SQL Server 2008, procedemos a correr el siguiente script.
Descargar: Script SQL Server
Para correr el script descargado en SQL Server, hacemos lo siguiente:
a) Abrimos SQL Server
b) Abrimos el Script descargado para correrlo
Hacemos clic en File, Open, File (otra vez)

Buscamos la ruta donde se encuentra el Script descargado y hacemos clic en Open

**Tener en cuenta que el script debe ser editado, sola y unicamente en la parte donde aparece esta línea de código:
CREATE DATABASE [sql_java] ON PRIMARY
( NAME = N'sql_java', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL_VIRTUAL\MSSQL\DATA\sql_java.mdf' , SIZE = 2048KB , FILEGROWTH = 1024KB )
LOG ON
( NAME = N'sql_java_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL_VIRTUAL\MSSQL\DATA\sql_java_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
Antes de correr el script se debe cambiar la parte en rojo y poner el nombre de la instancia que se eligio durante la instalación de SQL Server 2008. Favor poner el nombre correspondiente en esa parte del código, también verificar que la carpeta MSSQL10 se encuentre en la ruta indicada (C:\Program Files\Microsoft SQL Server\MSSQL10), también puede que reciba error al correrlo si le exige una capacidad en la base de datos mayor o igual a 3 MB, solo se debe cambiar la parte SIZE = 2048KB por SIZE = 3000 KB.
Después de hacer las correciones de lugar en esta parte del código, presionamos F5 para correr el Script.
Recibiremos un mensaje como este:

3. Agregamos un JFrame a nuestro proyecto creado anteriormente en el tema "Conectando Java con SQL Server". Después tendremos el Parlette para diseñar nuestra ventana, pero en este caso solo arrastraremos a nuestro JFrame un JTable yun JButton. Para completar esto, seguimos los pasos a continuación
a)

b)

Después de crear la nueva ventana (JFrame) arrastramos desde el Parlette en la derecha, todo lo que aparece en la siguiente pantalla, obviando el titulo de la ventana.
**Puede hacerlo en el orden que desee, pero favor renombrar los TextFields con los siguientes nombres:
nombre
apellido
identificacion
nacionalidad
sueldo
Al JTable le ponemos por nombre de variable "tablaPrueba"
A los botones le ponemos como nombre de variable "agregarDatos" y al segundo "enviarSQL"
Para cambiar el nombre de variable para los botones, tablas y textfields debemos hacer clic derecho encima del mismo
y luego en la opción "Change Variable Name..."
Esto nos permitira tener el mismo código fuente para que frente a cualquier referencia todo este claro.**
VENTANA CREADA:

c)
Para quitar el contenido de la tabla como se muestra en la imagen anterior, debemos seguir los siguientes pasos:
Hacemos clic derecho encima del JTable y luego clic en "Table Contents..."

En la pestaña "Columns" ponemos en CERO el Count.
Luego hacemos clic en la pestaña "Rows"

En la pestaña "Rows" ponemos en CERO el Count y hacemos clic en "Close"

d) Después de tener nuestra ventana como la siguiente procedemos a crear nuestro código fuente.

En la clase "Main" que creamos para la conexión de base de datos, debemos adaptar la conexión para tener acceso a nuestra nueva base de datos, por lo mismo debemos actualizar el nombre de la base de datos, usuario y contrasea de la misma de la forma que mostramos a continuación:
databaseName=sql_java
Usuario: sql_java
Contraseña: 123456789

Antes que nada vamos a la pestaña "Source" y ponemos el código que resaltamos en la siguiente imagen:

Volvemos a la pestaña "Design", hacemos clic derecho en el Botón "Agregar Datos", luego en "Events", "Actions", "actionPerformed".
Automáticamente saldremos del diseñador e iremos a la parte del código fuente, donde agregaremos el código que designara la acción para el botón.

Presionamos Shift + F6 para probar nuestra aplicación, debería verse algo como esto:

Después de comprobar que nuestra aplicación esta funcionando correctamente, procedemos a envíar esos datos a nuestra base de datos, hacemos clic derecho en el botón "Enviar a SQL Server", luego en "Events", "Actions", "actionPerformed", cuando nos aparezca la pantalla de código agregamos el siguiente:
try {
int row = 0;
int rowCount = Modelo.getRowCount();
/* Declaracion de variables tipo ArrayList, para guardar los datos
provenientes de las filas y columnas de la tabla*/
ArrayList Nombre = new ArrayList();
ArrayList Apellido = new ArrayList();
ArrayList Identificacion = new ArrayList();
ArrayList Nacionalidad = new ArrayList();
ArrayList Sueldo = new ArrayList();
do{
Nombre.add(Modelo.getValueAt(row, 0));
Apellido.add(Modelo.getValueAt(row, 1));
Identificacion.add(Modelo.getValueAt(row, 2));
Nacionalidad.add(Modelo.getValueAt(row, 3));
Sueldo.add(Modelo.getValueAt(row, 4));
row++;
} while(row < rowCount);
/*Con la parte del código que sigue, enviamos los datos a SQL Server*/
for(int i = 0; i < Nombre.size(); i++)
{
Query.execute("INSERT INTO tablaPruebas "+" VALUES ('"+Nombre.get(i)+"', "
+ "'"+Apellido.get(i)+"', "+"'"+Identificacion.get(i)+
"', '"+""+Nacionalidad.get(i)+"', "+""+Sueldo.get(i)+")");
}
JOptionPane.showMessageDialog(this, "Registro enviado correctamente.", "Aviso"
, JOptionPane.INFORMATION_MESSAGE);
this.setTableModel();
}catch(SQLException e)
{JOptionPane.showMessageDialog(this, "Error en base de datos." +
"\n\nError recibido: "+e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);}
Con esto ya tenemos nuestro programa terminado, solo tenemos que comprobar que los datos se esten enviando correctamente a SQL Server.
NOTA: Esta forma de insertar datos a SQL Server desde una tabla en Java es opcional, entiéndase que se puede realizar directamente desde los TextFields utilizando el primer botón, pero por propósitos de aprendizaje decidimos realizar el ejemplo de esta forma, así podrás aprender a insertar datos en un JTtable al mismo tiempo.
Comprobando la funcionalidad de la aplicación:
a)
Agregamos un registro al JTable, despues de presionar "Agregar Datos", presionamos "Enviar a SQL Server"

b)
Recibimos la confirmación del sistema.

c)
Ejecutamos la sentencia: SELECT * FROM tablaPruebas
Visualizamos el registro enviado anteriormente desde nuestra aplicación.

LISTO!
3. Cargar datos desde SQL Server a un JTable en Java
Siguiendo en el mismo código del tema No. 2, agregamos a nuestro JFrame un nuevo botón, y le ponemos como nombre de variable "buscarDatos"
Ahora nuestra ventana se vera como esta:

Hacemos clic derecho encima del botón "Buscar datos en SQL Server", luego en "Events", "Actions", "actionPerformed".
En la pantalla de código, agregamos el siguiente:
this.setTableModel();
try {
Resultado = Query.executeQuery("SELECT * FROM tablaPruebas");
while(Resultado.next())
{
Modelo.addRow(new Object [] {Resultado.getString(1),
Resultado.getString(2), Resultado.getString(3),
Resultado.getString(4), Resultado.getString(5)});
}
}catch(SQLException e)
{JOptionPane.showMessageDialog(this, "Error en base de datos." +
"\n\nError recibido: "+e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);}
NOTA: Puedes utilizar este código de diferentes maneras, consultar un registro en especifico por ejemplo. Usa tu imaginación!
En la parte del código donde ponemos "getString(1)" y vamos cambiando números es indicando el index de la columna de la cual traemos el dato, pero se puede poner el nombre de la columna directamente como indicamos en el tema No. 1
Comprobamos que los datos se muestren correctamente, primero visualizamos los datos en SQL Server (los datos a continuación fueron insertados para la prueba, no es necesario tenerlos).
Registro en SQL Server:

Regisitro consultado en nuestra aplicación:

Podemos notar que en la consulta realizada recibimos el campo sueldo en el siguiente formato: "10000.0000", esto se debe a que no dimos formato a los números antes de presentarlos. Luego crearemos un post nuevo donde indicaremos la manera de visualizar las cantidades en el formato: 10,000.00
LISTO!
4. Eliminar registro en Base de Datos a través de un JTable
Siguiendo en el mismo código del tema No. 3, agregamos a nuestro JFrame un nuevo botón, y le ponemos como nombre de variable "eliminarRegistro"
Ahora nuestra ventana se vera como esta:
Hacemos clic derecho encima del botón "Eliminar Registro", luego en "Events", "Actions", "actionPerformed".
En la pantalla de código, agregamos el siguiente:
if(tablaPrueba.isRowSelected(tablaPrueba.getSelectedRow()))
{
try {
int row = tablaPrueba.getSelectedRow();
for(int i = 0; i < Modelo.getRowCount(); i++)
{
Query.executeUpdate("DELETE FROM tablaPruebas WHERE " +
"identificacion = '"+Modelo.getValueAt(row, 2)+"'");
}
int numRows = tablaPrueba.getSelectedRows().length;
for(int i = 0; i < numRows ; i++ ) Modelo.removeRow(row);
JOptionPane.showMessageDialog(this, "Registro eliminado satisfactoriamente."
,"Confirmación", JOptionPane.INFORMATION_MESSAGE);
}catch(SQLException e)
{JOptionPane.showMessageDialog(this, "Error en base de datos." +
"\n\nError recibido: "+e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);}
}
else
{
JOptionPane.showMessageDialog(this, "Debe seleccionar un registro para eliminar."
,"Aviso", JOptionPane.WARNING_MESSAGE);
}
NOTA: Utilizar el código anterior en una tabla donde se almacenan datos importantes es peligroso, ya que si se tiene algun dato importante el cual lleva un campo identificador ya sea factura, identificación o ID, se borrara cada uno y todos los registros que tengan dicho valor en ese campo. Por lo mismo recomendamos hacer buen uso y personalizar el código de manera que no se pierda ningun dato importante.
En el código anterior textualmente le estamos indicando al sistema lo siguiente:
Si no se selecciona ningun registro presenta un mensaje de alerta diciendo "Debe seleccionar un registro para eliminar.",
pero si hay un registro seleccionado sigue el proceso donde tomaras el campo identificación de la fila seleccionada, con el dato seleccionado envia una sentencia a SQL Server donde vas a eliminar cualquier registro que tenga este dato como identificación, luego elimina también el registro de la tabla en la ventana y muestra un mensaje de confirmación que diga "Registro eliminado satisfactoriamente".
Realizamos la comprobación de lo programado:
a) Consultamos en SQL Server los datos actuales

b) Consultamos en nuestra aplicación dichos datos y procedemos a Eliminar un registro.
En este caso seleccionamos a "Luis Castillo", después de hacer clic en "Eliminar Registro",
recibimos la siguiente confirmación

c) Consultamos nuevamente en SQL Server los datos después de eliminar registro

LISTO
¿Esta información no responde a tu pregunta?
Dejanos saber tus dudas usando el siguiente formulario, responderemos tan rápido nos sea posible. Tu aporte es importante.