martes, 19 de marzo de 2013

Cómo conectarse a una base de datos en PostgreSQL utilizando JDBC

PostgreSQL es, hoy por hoy, uno de los mejores manejadores de base de datos relacionales libres y, desde mi particular punto de vista, una mejor opción frente a MySQL. Bueno, en esta oportunidad voy a mostrarles la manera de cómo conectarse a una base de datos en PostgreSQL utilizando Java y su biblioteca JDBC. 

Como pre-requisito debemos tener creada nuestra base de datos utilizando Pgadmin llamada 'test' luego de lo cual debemos ejecutar el siguiente script:

CREATE TABLE usuarios
(
  nombres text,
  apellidos text,
  id serial NOT NULL,
  CONSTRAINT usuarios_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE usuarios
  OWNER TO postgres;
Una vez creada nuestra base de datos es momento de relizar la conexión; para esto debemos agregar el conector que nos brinda PostgreSQL en el siguiente enlace: http://jdbc.postgresql.org/ y anexarlo a nuestro proyecto tal como se muestra en la siguiente figura:
Figura. Vista del árbol de dependencias de un proyecto en Netbeans
La clase ConexionSQL debe quedar como se muestra a continuación:

package biz.csti.pg;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 *
 * @author Rolando
 */
public class ConexionSQL {

    static String cadenaConexion = "jdbc:postgresql://127.0.0.1/test?" + "user=postgres&password=admin";

    public static void main(String[] arg) {
        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
            String consultaSQL = "SELECT * FROM USUARIOS";
            resultado = sentencia.executeQuery(consultaSQL);
            while (resultado.next()) {
                Long id = resultado.getLong("id");
                String nombres = resultado.getString("nombres");
                String apellidos = resultado.getString("apellidos");
                System.out.println(id + "t" + nombres + "t" + apellidos);
            }
        } catch (Exception e) {
            e.printStackTrace();
            conexion = null;
        } finally {
            if (resultado != null) {
                try {
                    resultado.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (sentencia != null) {
                try {
                    sentencia.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (conexion != null) {
                try {
                    conexion.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
Como podemos observar la manera de conectarse es bastante intuitiva, lo único que debemos cambiar es la contraseña en la cadena de conexión siguiente: 'jdbc:postgresql://127.0.0.1/test?" + "user=postgres&password=<contraseña>'. Espero que este ejemplo les sea de utilidad, muy pronto estaré presentando más cosas relacionadas a este gestor de base de datos.

9 comentarios:

Darwin Omar Guevara Diaz dijo...

Oe bro tienes exelente Informacion en tu BLog .........

Cristian Rico dijo...

Hola, la conexión fue un éxito pero quiero saber como se hacen las consultas (select) por ejemplo o si se pueden actualizar datos o eliminar,etc. te agradecería si respondieras gracias

Rolando Palermo Rodríguez Cruz dijo...

Hola Cristian

En el proyecto publicado muestro la manera de cómo hacer un SELECT.
Saludos.

Rolando Palermo Rodríguez Cruz dijo...

Gracias Darwin por apreciar mis artículos.
Saludos.

Cristian Rico dijo...

como quedaría el código si quisiera insertar,actualizar o eliminar datos? es que no hallo con el chiste, GRACIAS

Cristian Rico dijo...
Este comentario ha sido eliminado por el autor.
Comercial Tapia dijo...

hola hice lo mismo pero me sale este Error
rg.postgresql.util.PSQLException: ERROR: no existe la relación «pais»
Position: 15
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
at Prueba.main(Prueba.java:35)

public class Prueba {

static String cadenaConexion = "Jdbc:postgresql://localhost:5432/Pais" + "user=postgres&password=mayita";

public static void main(String[] arg) {
Connection conexion = null;
Statement sentencia = null;
ResultSet resultado = null;
String url = "Jdbc:postgresql://localhost:5432/Pais";
try {
Class.forName("org.postgresql.Driver");
conexion = DriverManager.getConnection(url,"postgres","mayita" );


sentencia = conexion.createStatement();
String consultaSQL = "SELECT * FROM Pais;";
resultado = sentencia.executeQuery(consultaSQL);
while (resultado.next()) {
// Long id = resultado.getLong("Id");
String apellidos = resultado.getString("Pais");

String nombres = resultado.getString("codigoP");
System.out.println( "t" + nombres + "t" + apellidos);
}
} catch (Exception e) {
e.printStackTrace();
conexion = null;
} finally {
if (resultado != null) {
try {
resultado.close();
} catch (Exception e) {
// e.printStackTrace();
}
}
if (sentencia != null) {
try {
sentencia.close();
} catch (Exception e) {
//e.printStackTrace();
}
}
if (conexion != null) {
try {
conexion.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

}
}

sergio gaspar dijo...

Excelente, funciona muy bien. Gracias por compartir.

Servicios de Innovación y Tecnología para Ecuador dijo...

ERROR: no existe la relación «pais» . Yo tuve el mismo rollo, y al revisar como pgAdmin lo hacia, resulta que requiere comillas sobre la tabla, en ese cso debería ser: "select * from \"pais\""
y listo funciona

Publicar un comentario