The::Beastieux

Sangre de Bestia + Corazón de Pingüino | Un blog acerca de Linux, *BSD, Open Source, Software Libre, Programación …

Código Java – Establecer Conexión a Base de Datos con JDBC


Por fin he preparado el Ejemplo #12 del Topic: Programación Gráfica en Java, en el cual explicaré sobre cómo conectarnos a una base de datos cualquiera desde Java, manteniendo una misma estructura.

Para realizar la conexión a base de datos desde java necesitamos hacer uso de JDBC. Las bases de datos que deseemos conectar deberán proveernos el driver JDBC en un empaquetado JAR para añadirlo a las librerías del proyecto.

Deberemos conseguir la librería de acuerdo a la versión de la Base de Datos al cual deseemos conectarnos. Es posible que su IDE reconozca la existencia del driver si la base de datos ha sido instalada en el mismo ordenador junto con sus librerías, solo haría falta añadirlo a la lista de librerías que se usarán en el proyecto, por ejemplo en NetBeans se podría ir al directorio Libraries del Proyecto, hacer clic derecho sobre el y elegir Add Library y en la lista podría encontrase la que necesitemos, o si queremos agregarla manualmente Add JAR/Folder y seleccionar desde la dirección donde lo tenemos almacenado.

Add Library:

Add JAR/Folder:

Una vez agregada la librería, vamos a realizar el código de conexión, el cual nos debe presentar una clase con 2 métodos que a mi parecer no deberían faltar. Debería existir una función(Las funciones retornan datos) que nos retorne un CachedRowSet que es algo similar al ResultSet que no podemos retornar mientras el Statement esté sin cerrar, pero es obvio que por seguridad deberemos tener todas las conexiones cerradas, por eso no retornamos directamente el ResultSet y hacerlo sin cerrar las conexiones sería de muy mala práctica. En cambio, el CachedRowSet almacena todos los registros y podemos manipularla con las conexiones cerradas, cosa que no podemos hacer con los ResultSets, ya que éstos necesitan al Statement Abierto, y el Statement a su vez necesita la conexión abierta. Por otro lado deberíamos tener un procedimiento(No retorna ningún dato), no retorna nada ya que se encargará de realizar operaciones unidireccionales.

En conclusión, usamos la Función cuando usemos Sentencias DML SELECT incluyendo las Funciones y usar el Procedimiento cuando usemos INSERT, DELETE O UPDATE, incluyendo los StoreProcedures(Procedimientos Almacenados); aunque podemos conocer algunas bases de datos que permitan retornar datos desde StoreProcedures, lo ideal seria hacerlo desde funciones, manteniendo cada uno para su propósito. Del mismo modo, habrán podido darse cuenta que ambos métodos reciben una variable String como parámetro, ésta es nada menos que la Sentencia DML que deseamos ejecutar.

package beastieux.gui;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import javax.sql.rowset.CachedRowSet;
import com.sun.rowset.CachedRowSetImpl;
/**
 *
 * @author beastieux
 */
public class Ejm12_ConectarDataBase {

    public CachedRowSet Function(String sql)
    {
            try
            {
                    Class.forName("Driver");

                    String url = "jdbc:motor:servidor:puerto/basededatos";
                    Connection con = DriverManager.getConnection(url, "usuario","contraseña");
                    Statement s = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                                      ResultSet.CONCUR_READ_ONLY);

                    ResultSet rs= s.executeQuery(sql);

                    CachedRowSet crs = new CachedRowSetImpl();
                    crs.populate(rs);

                    rs.close();
                    s.close();
                    con.close();

                    return crs;

            }
            catch(Exception e)
            {
                   System.out.println(e.getMessage());
            }

            return null;
    }

    public void StoreProcedure(String sql)
    {

            try
            {
                    Class.forName("Driver");

                    String url = "jdbc:motor:servidor:puerto/basededatos";
                    Connection con = DriverManager.getConnection(url, "usuario","contraseña");
                    Statement s = con.createStatement();

                    s.execute(sql);

                    s.close();
                    con.close();

            }
            catch(Exception e)
            {
                   System.out.println(e.getMessage());
            }
    }
}

Como habrán podido apreciar en el código, el manejo de excepciones es relativamente sencilla, lo ideal sería especificar las excepciones por cada conexion, statement y resultset para de esa manera asegurarnos que permanezcan cerradas al finalizar la ejecución o aun cuando existieran errores; de igual manera sería muy útil obligar a cerrar las conexiones desde dentro de una clausula finally anexada al try – catch.

Por último la url de conexión “jdbc:motor:servidor:puerto/basededatos”, variará a continuación de jdbc, según el motor de base de datos al que deseemos conectarnos (PostgreSQL, MySQL, Oracle, Derby, etc) , la dirección IP del servidor, el puerto y finalmente el nombre de la base de datos al que queramos acceder.

En los próximos posts se presentará las conexiones a las diversas bases de datos y la explicación de como usar la clase creada.

Código Java – Conexión a Base de Datos PostgreSQL
Código Java – Conexión a Base de Datos MySQL
Código Java – Conexión a Base de Datos Apache Derby (Embebida y Cliente – Servidor)

15 Respuestas a “Código Java – Establecer Conexión a Base de Datos con JDBC

  1. Fernando Saucedo junio 2, 2016 en 1:00 pm

    hola, buenas tardes,
    He aquí mi planteamiento: Yo tengo creada mi base de datos en Oracle, se llama Procesos, Mi servicors es localhost y el puerto 1522, Ya he hecho todas las combinaciones habidas y no me deja conectarme a la base de datos desde Bluej, Que es lo que me hace falta? Chequé los tnsnames.ora, puedo conectarme a través de oracle sql developer, en las herramientas del sistema origenes de datos ODBC, tambien se conecta correctamente. he aqui mi instruccion:

    ulr = “jdbc:oracle:localhost:1522/Procesos”;
    usuario= “system”;
    clave= “Dolores07”;

    System.out.println(“——– Oracle JDBC Connection Testing ——“);
    try
    {
    Connection connection = DriverManager.getConnection(ulr, usuario, clave);
    System.out.println(“Oracle JDBC Driver Registered!”);
    }
    catch (SQLException ex) {
    System.out.println(“Oracle JDBC Driver Error!”);

    }

    Al final me sigue mandando el error “no suitable driver found ….”

    Que me falta hacer?

    • Hector junio 19, 2016 en 11:41 pm

      Te hace falta tu lo siguiente:
      Class.forName( sun.jdbc.odbc.jdbcodbcdriver );

      Y si no tienes el jar de JDBC este es el link para que lo descargues y agregues en tu proyecto:
      ://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

      • Hector junio 19, 2016 en 11:47 pm

        Las nuevas tendencias son las siguientes:
        Class.forName(“oracle.jdbc.driver.OracleDriver”);
        conexion= DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:bd”, “username”,
        “password”);

  2. arnold junio 18, 2014 en 11:20 pm

    podrian dejarme un link sobre tutoriales asi como este porfa :(

    • ajajair julio 10, 2014 en 3:55 pm

      you are a dopey

  3. eskeldark mayo 28, 2014 en 1:41 pm

    oye una pregunta, tienes un tuto para que UTILIZANDO ESTA CONEXION pueda hacer consultas? por ejemplo un select * from xtabla???

  4. rodrigo enero 6, 2014 en 5:07 pm

    como hacer para llamar los datos de una base de datos a otra con java

  5. Jorge julio 14, 2013 en 10:50 am

    A mi da error al importar la siguiente librería:
    import com.sun.rowset.CachedRowSetImpl;

    Utilizo eclipse 3.7.1, y el JDK 1.6.0_23

  6. asd febrero 27, 2013 en 4:12 pm

    Exelente info , muy bien explicada todo muy generico muy sencillo
    Gracias-

  7. Anónimo agosto 1, 2012 en 11:12 pm

    soy algo nuevo en esto de java. primeramente felicitarte por tu gran aporte. y me pregunto si para realizar la conexion con SQL-server se termina haciendo practicamente lo mismo?
    hay diferencias en la conexion ya sea con cualquier otro gestor?

    • Anónimo agosto 1, 2012 en 11:15 pm

      Se me olvido el nombre David Escalante

  8. Alvin Merino junio 29, 2012 en 9:35 pm

    como se ejecuta en un terminal de ubuntu

  9. Cristian Montenegro junio 28, 2012 en 2:03 pm

    Buenas tardes estimado, estuve leyendo tu artículo sobre conexión a base de datos, me diante Java, y me parece un muy aporte tu blog. Me gustaría preguntarte si es que ese código me serviría para poder conectarme a una base de datos en acces, y de ser así, como se hace para dejar la base de datos alojada en el servidor, la verdad es que soy nuevo en esto de las bases de datos, y planeo mediante java poder acceder a mi base de datos desde cualquier parte con conexion a internet, pero lo unico que deseo es poder conectarme y que se ejecute la base de datos, porque todas las consultas y calculos, estan hechos internamente en la base de datos acces. Espero me puedas ayudar y nuevamente te felicito por tu gran aporte.

  10. fran marzo 27, 2012 en 6:35 pm

    donde se puede encontrar otros tutos buenos

    • BeAsTiEuX marzo 27, 2012 en 9:33 pm

      específicamente tutos sobre que tema?

No te quedes callado. Pregunta, Comenta, Comparte, Sígueme, Suscríbete, Déjame tu opinión... Soy Beastieux Zeroo...

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: