Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

Ejercicio de java.Clase de datos

En las líneas siguientes, construiremos la clase de datos, que es la que contiene la información de un registro de la tabla, y los comportamientos necesarios para leer, borrar y grabar los datos.

Manipulación de datos

La clase que ha de mapear la tabla, necesita atributos para cada columna de la tabla:

        private int idLibro;
    private String titulo;
    private String genero;
    private String autor;
    private Double precio;

que definiremos privados, para aislarlos de cualquier interrelación con el exterior. Para su lectura y llenado, proveeremos de los correspondientes métodos getter y setters:

   public int getIdLibro() {
        return idLibro;
    }
    public void setIdLibro(int idLibro) {
        this.idLibro = idLibro;
    }
    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    public String getGenero() {
        return genero;
    }
    public void setGenero(String genero) {
        this.genero = genero;
    }
    public String getAutor() {
        return autor;
    }
    public void setAutor(String autor) {
        this.autor = autor;
    }
    public Double getPrecio() {
        return precio;
    }
    public void setPrecio(Double precio) {
        this.precio = precio;
    }

Estos métodos, sobre todo los de carga, deberían incorporar instrucciones para filtrar los dato (longitud de string, valores numéricos,….)

Constructores

Crearemos dos constructores, uno que se limita a dejar creado el objeto, y otro que espera que se le pase un idLibro, y ya devuelve el objeto cargado:

        Libros(){
    }
    Libros(int numero){
        leerRegistro(numero);
    }

En el segundo constructor, hemos utilizado un método que deberemos crear, y que es el mismo que utilizaremos cuando se desee cargar un registro.

Lectura de registros

   public void leerRegistro(int numero){
        ResultSet rs;
        miConexion = Conexion.getConexion();
        error=false;
        try {
            sql=miConexion.createStatement();
            rs=sql.executeQuery("SELECT * FROM Libros WHERE idLibro="+numero);
            if (rs.next()){
                carga(rs);
            } else
                error=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Si analizamos el método, vemos que lo primero que hace es obtener una conexión, utilizando un método estático de la  clase Conexion descrita anteriormente, a continuación, lanza una query para obtener el registro solicitado, y si lo encuentra (rs.next()=true), lo carga en cada una de las variables utilizando este método

   private void carga(ResultSet rs){
        try {
            idLibro=rs.getInt("idLibro");
            titulo=rs.getString("Titulo");
            autor=rs.getString("Autor");
            precio=rs.getDouble("Precio");
            genero=rs.getString("Genero");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

y retorna true.

 Grabación de registros

En este método, debemos preparar la orden de insert.

   public void grabarRegistro(){
        String sentencia;
        sentencia="INSERT INTO Libros"+
                "(Titulo,Autor,Genero,Precio) " +
                " VALUES ("+
                "'"+titulo+"',"+
                "'"+autor+"',"+
                "'"+genero+"',"+
                precio+
                ")";
        System.out.println(sentencia);
        try {
            miConexion = Conexion.getConexion();
            sql=miConexion.createStatement();
            sql.executeUpdate(sentencia);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Lo hacemos obteniendo los datos de lo que contenga la instancia en la que trabajamos, eso implica que la clase llamadora, deberá previamente cargar los datos en cada atributo.

Borrar registro

El método para borrar registro, espera recibir el idLibro, obtiene un objeto conexión, y lanza una query para borrarlo.

   public void borrarRegistro(int numero){
        miConexion = Conexion.getConexion();
        String sentencia="DELETE FROM Libros WHERE idLibro="+numero;
        error=false;
        try {
            sql=miConexion.createStatement();
            sql.executeUpdate(sentencia);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

sencillo, ¿no?

Método toString

Pensado especialmente para las pruebas, implementamos un método toString:

   public String toString(){
        return  "IdLibro:"+idLibro+
                "\tTitulo:"+titulo+
                "\tAutor:"+autor;

    }

en el que retornamos una String con los literales y contenidos de idLibro, Titulo, y Autor, separados por marcas de tabulación.

Listado de registro

Si queremos soportar los listados, deberemos preveer un método para seleccionar los registros, y podría ser éste:

   public boolean listarRegistro(){
        return listarRegistro("");
    }
public boolean listarRegistro(String where){
        miConexion = Conexion.getConexion();
        eof=false;
        String sentencia="SELECT * FROM Libros ";
        if (where.length()>0){
            sentencia+=" WHERE "+where;
        }
        try {
            sql=miConexion.createStatement();
            rs=sql.executeQuery(sentencia);
            if (rs.next()){
                carga(rs);
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }

Hemos previsto sobrecargar el método para que pueda ser llamado con y sin claúsula where, en este último caso, seleccionaríamos todos los registros.

Estos métodos cargan el resulset con los registros seleccionados, y dejan los datos del primero cargados en los atributos.

Para que la clase que llama, pueda recorrer la lista, deberemos también, preveer el recubrimiento de next(), last(), previous() y first().

   public boolean next(){
        try {
            if (rs.next()){
                carga(rs);
                eof=false;
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }
    public boolean first(){
        try {
            if (rs.first()){
                carga(rs);
                eof=false;
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }
    public boolean previous(){
        try {
            if (rs.previous()){
                carga(rs);
                eof=false;
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }
    public boolean last(){
        try {
            if (rs.last()){
                carga(rs);
                eof=false;
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }

 Conclusión

Aunque no sea la clase ideal para enviar a producción, nos ha permitido conocer las posibilidades del acceso a datos. Debéis considerar que el tratamiento de errores de la clase, se limita a comunicarlo por System.out, y no se hace ninguna comprobación….

A continuación, tenéis el módulo completo para facilitar su copia.

import java.sql.*;

public class Libros {

    private int idLibro;
    private String titulo;
    private String genero;
    private String autor;
    private Double precio;

    Statement sql;
    private ResultSet rs;

    public boolean error=false;
    public boolean eof=false;
    Connection miConexion;

    public  Libros(){
    }
    public Libros(int numero){
        leerRegistro(numero);
    }
    public Libros(String titulo){
        leerRegistro(titulo);
    }

    public void borrarRegistro(int numero){
        miConexion = Conexion.getConexion();
        String sentencia="DELETE FROM Libros WHERE idLibro="+numero;
        error=false;
        try {
            sql=miConexion.createStatement();
            sql.executeUpdate(sentencia);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public boolean listarRegistro(){
        return listarRegistro("");
    }
    public boolean listarRegistro(String where){
        miConexion = Conexion.getConexion();
        eof=false;
        String sentencia="SELECT * FROM Libros ";
        if (where.length()>0){
            sentencia+=" WHERE "+where;
        }
        try {
            sql=miConexion.createStatement();
            rs=sql.executeQuery(sentencia);
            if (rs.next()){
                carga(rs);
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }
    public boolean next(){
        try {
            if (rs.next()){
                carga(rs);
                eof=false;
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }
    public boolean first(){
        try {
            if (rs.first()){
                carga(rs);
                eof=false;
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }
    public boolean previous(){
        try {
            if (rs.previous()){
                carga(rs);
                eof=false;
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }
    public boolean last(){
        try {
            if (rs.last()){
                carga(rs);
                eof=false;
            } else
                eof=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return eof;
    }
    public void leerRegistro(int numero){
        ResultSet rs;
        miConexion = Conexion.getConexion();
        error=false;
        try {
            sql=miConexion.createStatement();
            rs=sql.executeQuery("SELECT * FROM Libros WHERE idLibro="+numero);
            if (rs.next()){
                carga(rs);
            } else
                error=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public void leerRegistro(String titulo){
        ResultSet rs;
        miConexion = Conexion.getConexion();
        error=false;
        try {
            sql=miConexion.createStatement();
            rs=sql.executeQuery("SELECT * FROM Libros WHERE Titulo='"+titulo+"'");
            if (rs.next()){
                carga(rs);
            } else
                error=true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public void grabarRegistro(){
        String sentencia;
        sentencia="INSERT INTO Libros"+
                "(Titulo,Autor,Genero,Precio) " +
                " VALUES ("+
                "'"+titulo+"',"+
                "'"+autor+"',"+
                "'"+genero+"',"+
                precio+
                ")";
        System.out.println(sentencia);
        try {
            miConexion = Conexion.getConexion();
            sql=miConexion.createStatement();
            sql.executeUpdate(sentencia);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public Object[] toArray(){
        Object[] sal = new Object[5];

        try {
            sal[0]=rs.getObject("idLibro");
            sal[1]=rs.getObject("Titulo");
            sal[2]=rs.getObject("Autor");
            sal[3]=rs.getObject("Precio");
            sal[4]=rs.getObject("Genero");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return sal;
    }
    private void carga(ResultSet rs){
        try {
            idLibro=rs.getInt("idLibro");
            titulo=rs.getString("Titulo");
            autor=rs.getString("Autor");
            precio=rs.getDouble("Precio");
            genero=rs.getString("Genero");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    public String toString(){
        return  "IdLibro:"+idLibro+
                "\tTitulo:"+titulo+
                "\tAutor:"+autor;

    }
    public int getIdLibro() {
        return idLibro;
    }
    public void setIdLibro(int idLibro) {
        this.idLibro = idLibro;
    }
    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    public String getGenero() {
        return genero;
    }
    public void setGenero(String genero) {
        this.genero = genero;
    }
    public String getAutor() {
        return autor;
    }
    public void setAutor(String autor) {
        this.autor = autor;
    }
    public Double getPrecio() {
        return precio;
    }
    public void setPrecio(Double precio) {
        this.precio = precio;
    }
}

 

8 comentarios

  1. me podrian mandar el resto del codigo tengo un proyecto que entregar en poco tiempo
    y no se por donde empezar se les agradece puedo recibirlo en el correo, ya corri el alta del libro …

    1. El articulo presenta un ejemplo de como se puede acceder a una BD desde Java, y explica la forma de hacer los accesos mas habituales. Se trata de hacer una clase que encapsule la persistencia….no hay mas codigo. Lo siento.

  2. me podrian mandar el resto del codigo tengo un proyecto que entregar en poco tiempo
    y no se por donde empezar se les agradece puedo recibirlo en el correo, ya corri el alta del libro …

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 44.212.94.2
Proxy: 44.212.94.2
Remote host: ec2-44-212-94-2.compute-1.amazonaws.com
Remote port: 35408
** 44.212.94.2, 162.158.78.27