sábado, 16 de julio de 2011

Conectar JAVA con PosgreSQL (JDBC) 2

Código de conexión con la base de datos



/***
* Clase que permita relizar una conexion a una BD utilizando
* JDBC.
*
* Driver postgresql : http://jdbc.postgresql.org/download.html
* Driver mysql : http://www.mysql.com/products/connector/
* Lista de drivers API JDBC : http://developers.sun.com/product/jdbc/drivers

* @author [D-m-K], Between Codes and Tags
*/


import java.sql.*;

public class Conexion {

// Datos de conexion
private final String driver = "org.postgresql.Driver";
private final String name_db = "jdbc:postgresql://localhost:5432/betweencodes";
private final String user_db = "postgres";
private final String pass_db = "master";
private Connection con;
private PreparedStatement pst;

/**
* Constructor que realiza la conexion cuando se instancia un objeto Conexion
*/

Conexion(){
try {
// Driver de conexion, en este caso estoy utilizando el de
// postgresql

Class.forName(driver);
// Creo una conexion con la base de datos a partir de los datos de conexion
con = DriverManager.getConnection(name_db, user_db, pass_db);
} catch (Exception e) {
//Si ocurre un error lo capturo
e.printStackTrace();
}
}

/**
* A partir de una consulta SQL realizada por el usuario obtiene un
* resultado
*
* @param sql
* @return
*/

public void consulta(String sql) {
// Declaracion en null del resultSet
System.out.println("Consulta : " + sql + "\n");
try {
//Para contar los registros
int registros = 0;
//Preparo la sentencia sql a ejecutar
pst = con.prepareStatement(sql);
//Obtengo los datos de la consulta en un resultset
ResultSet rs = pst.executeQuery();
//Guardo los datos del ResultSet en un ResultSetMetadata para jugar un poco mas
ResultSetMetaData rsm = rs.getMetaData();

//Obtengo los nombres de las columnas :D
for (int i = 1; i <= rsm.getColumnCount(); i++) {
System.out.print("" + rsm.getColumnName(i) + " | ");
}
System.out.println("");

while(rs.next()){
for (int i = 1; i <= rsm.getColumnCount(); i++) {
System.out.print(rs.getString(i) + " | ");
}
registros++;
System.out.println("");
}

System.out.println("\nCantidad de registros : " + registros);
System.out.println("------------------------------------------------- \n");
//Libero los datos del PreparedStatement, automaticamente tambien se libera el ResultSet
pst.close();
} catch (SQLException e) {
// Capturo la excepcion en caso de error
e.printStackTrace();
}
}


/**
* Se encarga de ejecutar sentencias DML del tipo : UPDATE, DELETE, INSERT...
* @param sql
*/

public void sentencia(String sql) {
// Declaracion en null del resultSet
System.out.println("Sentencia : " + sql + "\n");
try{
//Preparo la sentencia sql a ejecutar
pst = con.prepareStatement(sql);
//Para contar los registros afectados
int registros = pst.executeUpdate();

System.out.println("\nCantidad de registros afectados : " + registros);
System.out.println("------------------------------------------------- \n");
//Libero los datos del PreparedStatement, automaticamente tambien se libera el ResultSet
pst.close();
} catch (SQLException e) {
// Capturo la excepcion en caso de error
e.printStackTrace();
}
}



/**
* Metodo que permite cerrar la conexion realizada a la BD
*/

public void desconectar() {
try {
//Cierro todas las conexiones con la base de datos
//Automaticamente libero memoria y cierro las conexiones abiertas en el objeto Connection

con.close();
} catch (Exception e) {
// Controlo cualquier excepcion generada durante el cierre de la conexion
e.printStackTrace();
}
}

/**
* Ejemplo de la utilizacion de la clase Conexion
* @param args
*/

public static void main(String args[]){
//Creacion de objeto conexion para crear una conexion a la Base de datos
Conexion c = new Conexion();
//Ejecucion de consulta : Retorna los datos en pantalla
c.consulta("SELECT * FROM usuario");
c.consulta("SELECT count(1) FROM usuario");
c.consulta("SELECT id, login, page_url FROM usuario WHERE login LIKE '%a%'");
//Ejecucion de INSERT, UPDATE y DELETE
c.sentencia("INSERT INTO usuario (login,pass,name,page_url) VALUES ('uno',md5('1'),'El usuario 1','No tiene')");
c.sentencia("INSERT INTO usuario (login,pass,name,page_url) VALUES ('dos',md5('2'),'El usuario 2','tampoco')");
c.sentencia("UPDATE usuario SET page_url = 'http://www.google.com' WHERE login = 'cocoman'");
c.sentencia("DELETE FROM usuario WHERE name LIKE '%usuario%'");
//Desconexion a la Base de datos
c.desconectar();
}

}


Resultados obtenidos luego de la ejeución

Consulta : SELECT * FROM usuario

id | login | pass | name | page_url |
6 | dmk | e10adc3949ba59abbe56e057f20f883e | [D-m-K] | http://dmk-ricteam.blogspot.com/ |
8 | Checho | 900150983cd24fb0d6963f7d28e17f72 | DonChecho | http://www.seedcol.net/ |
9 | ghost | d16fb36f0911f878998c136191af705e | Ghost | http://developeando.net/ |
11 | Disegin | 68053af2923e00204c3ca7c6a3150cf7 | Disegin | http://disegin.info/es/ |
10 | Urban | 250cf8b51c773f3f8dc8b4be867a9a02 | ElTales | http://www.brianur.info/ |
7 | cocoman | 202cb962ac59075b964b07152d234b70 | CocoMan | http://www.google.com |

Cantidad de registros : 6
-------------------------------------------------

Consulta : SELECT count(1) FROM usuario

count |
6 |

Cantidad de registros : 1
-------------------------------------------------

Consulta : SELECT id, login, page_url FROM usuario WHERE login LIKE '%a%'

id | login | page_url |
10 | Urban | http://www.brianur.info/ |
7 | cocoman | http://www.google.com |

Cantidad de registros : 2
-------------------------------------------------

Sentencia : INSERT INTO usuario (login,pass,name,page_url) VALUES ('uno',md5('1'),'El usuario 1','No tiene')


Cantidad de registros afectados : 1
-------------------------------------------------

Sentencia : INSERT INTO usuario (login,pass,name,page_url) VALUES ('dos',md5('2'),'El usuario 2','tampoco')


Cantidad de registros afectados : 1
-------------------------------------------------

Sentencia : UPDATE usuario SET page_url = 'http://www.google.com' WHERE login = 'cocoman'


Cantidad de registros afectados : 1
-------------------------------------------------

Sentencia : DELETE FROM usuario WHERE name LIKE '%usuario%'


Cantidad de registros afectados : 2
-------------------------------------------------


Salu2

No hay comentarios:

Publicar un comentario