lunes, 11 de junio de 2012

Base de datos II

Una de las API mas utilizada en cualquier aplicacion Java seguramente sera JDBC, o Java Database Connectivity , es la API utilizada para conectarse a cualquier motor de bases de datos.

Brevemente, JDBC utiliza drivers de terceros para poder conectarse a los motores, con esto se logra una gran potencia puesto que se puede acceder a cualquier motor, es decir podriamos pensar en tener una aplicaci?n que se ejecute en Access y luego migrarla a MySQL sin mayor inconveniente mas que el de reemplazar el driver que se utiliza. Salvando claro, el tema de copiar las tablas de un motor a otro.

Les dejo un breve ejemplo de como se haria una consulta a una base de datos MySQL, con un script sql para crear una base y un luego el ejemplo en java:

Pedidos.sql


CREATE DATABASE pedidos;
USE pedidos;
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for pedidos
-- ----------------------------
DROP TABLE IF EXISTS `pedidos`;
CREATE TABLE `pedidos` (
  `pedido_id` int(11) NOT NULL auto_increment,
  `sector_id` int(11) default NULL,
  `casino_id` int(11) default NULL,
  `estado_id` int(11) default NULL,
  `proveedor` varchar(240) default NULL,
  `usuario_id` int(11) default NULL,
  `fecha` date NOT NULL,
  `hora` time NOT NULL,
  PRIMARY KEY  (`pedido_id`)
) ENGINE=MyISAM AUTO_INCREMENT=49 DEFAULT CHARSET=latin1;


INSERT INTO `pedidos` VALUES ('47', '4', '1', '2', 'Proveedor 1', '0', '2009-06-11', '16:52:59');
INSERT INTO `pedidos` VALUES ('48', '4', '1', '2', 'Proveedor 2', '0', '2009-06-11', '16:53:52');

Es necesario que descarguen el driver de mysql para que lo puedan ejecutar.

Ahora les dejo el codigo del ejemplo java, que les muestra como conectarse con la base y realizar una consulta:


import java.sql.*;
import java.util.*;

public class EjemploBase {
  
  
  public EjemploBase() {
    
    /* 
     * Asumimos que el MySQL esta en la misma maquina, 
     * y que el usuario es root y no tiene clave
     */
    conectar("pedidos","root","","localhost");
    
    consultar();
    
    
  }
  
  private Connection con;

  public void conectar(String db,String dbUser,String dbPass,String dbHost) {
    try {
      Class.forName("com.mysql.jdbc.Driver");
      
      con = DriverManager.getConnection("jdbc:mysql://"+dbHost+"/"+db,dbUser,dbPass);

    } catch(SQLException e) {

      System.err.println("SQL Exception: "+e.getMessage());

    } catch(Exception e) {

      System.err.println("Exception: "+e.getMessage());

    } 
  }
  
    public void consultar() {
    
    try {
    
      PreparedStatement pstmt = con.prepareStatement("SELECT * FROM pedidos");
     
      ResultSet rs = pstmt.executeQuery();
      
      ResultSetMetaData rsmd = pstmt.getMetaData();
      
      int columnas = rsmd.getColumnCount();

      System.out.println("Cantidad de columnas: "+columnas);

      while(rs.next()) {
        
        for(int i=1;i < columnas;i++) {
        
          System.out.print(rs.getString(i)+" | ");
        
        }
        
        System.out.println("");
        
        
      }
      rs.close();
      pstmt.close();
    
    } catch(SQLException e) {

      while (e != null) {
        System.err.println("Message:   "+ e.getMessage ());
        System.err.println("SQLState:  "+ e.getSQLState ());
        System.err.println("ErrorCode: "+ e.getErrorCode ());
        e = e.getNextException();
        System.err.println("");
      }
    }

  }
  
  
  public static void main(String[] args) {
    EjemploBase base = new EjemploBase();
  }
  
}
	  

No hay comentarios:

Publicar un comentario