miércoles, 9 de abril de 2014

Java JDBC : Introduccion basica para principiantes a JAVA JDBC



Para aquellos que quieren empezar con Java y se les hace muy engorroso. Bueno la verdad cuando yo también empecé con Java, fue algo complejo, existe mucha información y Java no es solo un lenguaje es una plataforma, donde puedes juntar diferentes lenguajes y teconologías.

En este post, procuro hacer una introduccion basica a JDBC, que es la tecnología que utiliza Java para la conexión a Base de Datos.



Aunque yo soy un fan de los editores de texto, en mi caso para PHP uso VIM, les sugiero que descarguen un buen IDE, claro que cada uno tiene sus gustos, yo la verdad prefiero NetBeans e IntelliJ, pero para los que recién empiezan les sugiero NetBeans, este ejemplo fue desarrollado utilizando este IDE.


Voy a ir directo al codigo, para los principiantes, lo que van a ver es un archivo Java, donde todo el codigo corre dentro del main, si tienen nociones de C, entenderán, sino les digo que es la primera entrada de todo programa Java, y le indica que es un archivo a ejecutar.

Bueno les explicaré el código, como dije todo corre dentro del Main, si solo has visto VB, es el evento Load de tu formulario.

Las primeras lineas definen el paquete, esto en Java permite saber la ubicación de los archivos, package

Luego importamos las librerías que utilizaremos, es hacer una referencia a las mismas, similar a PHP con require.
No es necesario que sepan donde está cada librería aunque si es bueno, con nuestro IDE podemos importarlas a medida que vayamos agregando nuestro código asi que no hay necesidad de preocuparse por ello.

A continuacion definimos nuestra clase, como saben JAVA es un lenguaje Orientado a Objetos, por lo tanto todo dentro de el son Clases y Objetos, en nuestro caso public class JdbcBasico.

Y ahora definimos el metodo void main, que ya les he explicado que es, el inicio de nuestro programa, aqui definiremos los nuestro programa.

Crear la conexion

Para crear la conexion, Java utilizar la clase Connection, que esta dentro de java.sql
Para utilizarla debemos decirle a Java que cree una conexion basado en el Driver, que es el API de nuestra base de datos, asi hay Driver para Mysql, MariaDB, Derby, SQL Server, etc
Y como le decimos que utilizar es sencillo, en Java la cadena de conexion tiene este formato:

jdbc: <Driver> :// <Ubicacion de la base de datos>:<puerto>/<Base de Datos>

En nuestro ejemplo jdbc:derby://localhost:1527/sample, con esto le decimos :
  • Driver: Derby
  • Ubicacion: localhost
  • Puerto: 1527
  • Base de Datos: sample

Y si se preguntan como pasar el usuario y contraseña de la Base de Datos, bueno Java permite pasar las propiedades como un objeto en la conexion, utilizamos el objeto Properties, que es similar a un Map o HashTable, donde cada elemento tiene una llave o identificador y su valor, por eso en nuestro ejemplo lo definimos asi:

opciones_coneccion.put("user", "app");

Entonces creamos nuestra conexion

//Definimos algunos datos de la coneccion
Properties opciones_coneccion = new Properties();
opciones_coneccion.put("user", "app");
opciones_coneccion.put("password", "app");
//Conectar con la base de datos
Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/sample", opciones_coneccion);

Consultas con JDBC


Java JDBC provee una forma rápida de consultar, que es utilizando las Clases Statement que es nuestra sentencia a ejecutar y ResultSet que es donde se almacenan los resultados.

Para crear un statement es utilizando el metodo createStatement() de la clase Connection.

Una vez creado, podemos ejecturar nuestra sentencia y obtener los resultados usando el metodo executeQuery, este resultado se asignará a nuestro objeto ResultSet.

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from CUSTOMER where CUSTOMER_ID=1");
//Validamos que haya datos para mostrar
if (rs.next()) {
    //Salida de la consulta
    System.out.println("============CUSTOMER CON ID 1===========");
    System.out.println("ID \t NAME");
    System.out.println(rs.getInt(1) + "\t" + rs.getString("NAME"));
}

En este ejemplo queremos retornar un solo registro para ver sus valores, validamos el metodo next(), que además nos ubica el cursor en la posicion correcta.

Hemos impreso los valores en pantalla utilizando System.out.println, esto imprime en la consola, el caracter \t indica que imprima un Tab

Si queremos listar varios valores

rs = stmt.executeQuery("select * from CUSTOMER where DISCOUNT_CODE='M'");
System.out.println("ID \t NAME \t\t DISCOUNT_CODE");
while (rs.next()) {
   //Salida de la consulta                                
   System.out.println(rs.getInt(1) + "\t" + rs.getString("NAME") + "\t" + rs.getString("DISCOUNT_CODE"));
}



Sentencias Insert, Update y Delete con JDBC

Para ejecutar este tipo de consultas se sugiere utilizar PreparedStatement, los cuales son Statements que admiten parametros, al ser Java un lenguaje fuertemente tipado, usando esta Clase podemos evitar ataques de inyeccion SQL hasta cierto punto.

La forma de crear un PreparedStatement es similar al statement con la diferencia que la sentencia debe ser definida al momento de la creación.

PreparedStatement pstmtInsert=con.prepareStatement("insert into DISCOUNT_CODE (DISCOUNT_CODE, RATE) values (?,?)");

Como pueden ver en nuestra sentencia existen los signos ?, este signo indica que es un parámetro.

Insertar Valores de un Parametro en un PreparedStatement


Cuando usamos PreparedStatement, los parametros se crean en un array, empezando con 1.
Entonces al querer asignar un valor utilizamos el indice de nuestro parametro de acuerdo al orden en que aparecen en nuestra sentencia.

La clase PreparedStatement

PreparedStatement pstmtInsert=con.prepareStatement("insert into DISCOUNT_CODE (DISCOUNT_CODE, RATE) values (?,?)");
pstmtInsert.setString(1, "Z");
pstmtInsert.setDouble(2, 20.0);



Ejecutar sentencias Insert, Update y Delete con JDBC


Para ejecutar este tipo de sentencias se recomienda usar el metodo executeUpdate, el cual le dice a JDBC que no va a devolver valor alguno.

PreparedStatement pstmtInsert=con.prepareStatement("insert into DISCOUNT_CODE (DISCOUNT_CODE, RATE) values (?,?)");
pstmtInsert.setString(1, "Z");
pstmtInsert.setDouble(2, 20.0);
pstmtInsert.executeUpdate();



Codigo Completo





1 comentario:

 
Powered by Blogger