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.sqlPara 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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* To change this license header, choose License Headers in Project Properties. | |
* To change this template file, choose Tools | Templates | |
* and open the template in the editor. | |
*/ | |
package jdbcbasico; | |
import java.sql.Connection; | |
import java.sql.DriverManager; | |
import java.sql.PreparedStatement; | |
import java.sql.ResultSet; | |
import java.sql.SQLException; | |
import java.sql.Statement; | |
import java.util.Properties; | |
import java.util.logging.Level; | |
import java.util.logging.Logger; | |
/** | |
* | |
* @author 617334 | |
*/ | |
public class JdbcBasico { | |
/** | |
* @param args the command line arguments | |
*/ | |
public static void main(String[] args) { | |
try { | |
//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); | |
System.out.println("Conectado con la base de datos"); | |
//Ejecutar una consulta y listar datos | |
/* | |
Esta base de datos tiene una tabla CUSTOMER | |
Consultaremos y visualizaremos un registro | |
*/ | |
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")); | |
} | |
/* | |
Consultaremos la misma tabla | |
para obtener mas registros | |
*/ | |
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")); | |
} | |
/* | |
Ingresemos un registro a la tabla DISCOUNT_CODE | |
Vamos a usar PREPARED STATEMENTS | |
*/ | |
PreparedStatement pstmtInsert=con.prepareStatement("insert into DISCOUNT_CODE (DISCOUNT_CODE, RATE) values (?,?)"); | |
pstmtInsert.setString(1, "Z"); | |
pstmtInsert.setDouble(2, 20.0); | |
pstmtInsert.executeUpdate(); | |
/* | |
Actualicemos el Rate de nuestro registro en DISCOUNT_CODE | |
*/ | |
PreparedStatement pstmtUpdate=con.prepareStatement("update DISCOUNT_CODE SET RATE=? where DISCOUNT_CODE=?"); | |
pstmtUpdate.setDouble(1, 30.0); | |
pstmtUpdate.setString(2, "Z"); | |
pstmtUpdate.executeUpdate(); | |
/* | |
Borremos nuestro registro en DISCOUNT_CODE | |
*/ | |
PreparedStatement pstmtDelete=con.prepareStatement("delete from DISCOUNT_CODE where DISCOUNT_CODE=?"); | |
pstmtDelete.setString(1, "Z"); | |
pstmtDelete.executeUpdate(); | |
} catch (SQLException ex) { | |
Logger.getLogger(JdbcBasico.class.getName()).log(Level.SEVERE, null, ex); | |
} | |
} | |
} |
MUY BUENO!!!
ResponderEliminar