No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

CRUD: lectura de datos

12/25
Recursos

Aportes 34

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Lo hice un poco mas visual usando JFORM, y este fue el resultado鈥(en lo personal鈥e gusto mucho)



Buen d铆a profesor. La capa DAO es la que est谩 ejecutando la lectura de la base de datos y a su vez es la que est谩 ejecutando los prints de los datos obtenidos. Estos prints deber铆an ser ejecutados por la capa de servicio para mantener la consistencia de lo que estamos programando. Para ello debemos generar en la capa DAO un arraylist de objetos mensajes y enviarlos a la capa de servicio, y aqu铆 ejecutar el while para hacer los prints.

Por lo tanto, es falsa su afirmaci贸n que 鈥渉emos aprendido a leer los datos de una base de datos a trav茅s de nuestra capa DAO y enviarlos a nuestra capa de servicio鈥. Solo los lee y imprime en la capa DAO.

No se ustedes muchachos鈥 Pero para mi es emocionante ver este tipo de trabajos funcionando en mi computadora jejej.

Muy chevere la clase!!!
Gracias Profe!!!

Lamentablemente al momento de imprimir los datos en pantalla desde Mensajes DAO ha roto la metodologia en capas. Acaso no es Inicio.java la que interactua con el usuario?

Me parece o se repite la parte del video donde pone el codigo leerMensajesDAO

Es muy importante siempre cerrar los objetos para que no quede ese espacio en memoria. Ahorita no ven la diferencia, pero en proyecto a gran escala cada objeto no cerrado adecuadamente hace lenta la aplicacion.

Lo cerramos con el metodo close.

Esta fue mi soluci贸n para leer los diferentes mensajes dentro de la base de datos

dentro de la clase messagesServices

static void messagesList(){
        System.out.println("---------------------------------");
        System.out.println("MESSAGE");
        ArrayList<Messages> messages = MessagesDAO.readMessage();

        for (Messages message:messages) {
            System.out.println("id: " + message.getMessageId());
            System.out.println("Message: " + message.getMessage());
            System.out.println("Author: " + message.getMessageAuthor());
            System.out.println("Date: " + message.getMessageDate());
        }
    }

y dentro de la clase MessagesDAO

public static ArrayList<Messages> readMessage(){
ConnectionToDB connectionToDB = new ConnectionToDB();
 ArrayList<Messages> messages = new ArrayList<Messages>();
        try {
            Connection connection = connectionToDB.getConnection();

            String sql = "SELECT * FROM messages";

            PreparedStatement preparedStatement =             connection.prepareStatement(sql);
            ResultSet rs = preparedStatement.executeQuery();

            while (rs.next()){
                Messages message = new Messages();
                message.setMessageId(rs.getInt("id_message"));
                message.setMessage(rs.getString("message"));
                message.setMessageAuthor(rs.getString("autor"));
                message.setMessageDate(rs.getDate("date"));
                messages.add(message);
            }

        } catch (SQLException e){
            e.printStackTrace();
            System.out.println(e);
        }
        return messages;
    }

Atenci贸n producci贸n. El procedimiento de creaci贸n de la clase leerMensajesDB se ha repetido nuevamente desde el minuto 1:29 generando la sensaci贸n de confusi贸n.

while(rs.next()){
System.out.println("ID: " + rs.getInt(1));
System.out.println("Mensaje: " + rs.getString(2));
System.out.println(鈥淎utor: " + rs.getString(3));
System.out.println(鈥淔echa: " + rs.getString(4));
System.out.println(鈥漒n鈥);

        }

pueden colocar numeros que correspondan al numero de la columna que son cuatro.

Buenos compa帽eros, en realidad es una mala practica que hizo el profesor para agregar los prints en la cada DAO en lugar de agregarlos en la capa de servicio, ac谩 les paso como debi贸 ser en la capa DAO creando un arrayList

Y como hubiera sido en la capa de servicio

Un saludo para todas las personas que ven este video, actualic茅 el proyecto en mi repositorio de github con buenas pr谩cticas.

Tal y como los compa帽eros dicen, separ茅 puse los prints en Services y no en DAO, esta fue mi manera:

DAO:

    public static ArrayList<Message> readMessagesDB() {
        ArrayList<Message> allMessages = new ArrayList<>();
        try (Connection connect = ConnectDatabase.getConnection()){
            PreparedStatement ps = null;
            ResultSet rs = null;
            try {
                String query = "SELECT * FROM messages";
                ps = connect.prepareStatement(query);
                rs = ps.executeQuery();

                while (rs.next()) {
                    Message currentMessage = new Message();
                    currentMessage.setMessageID(rs.getInt("message_id"));
                    currentMessage.setMessage(rs.getString("message"));
                    currentMessage.setMessageAuthor(rs.getString("message_author"));
                    allMessages.add(currentMessage);
                }

            } catch (SQLException ex) {
                System.out.println(ex);
            }
        } catch (SQLException e) {
            System.out.println(e);
        }
        return allMessages;
    }

Services:

    public static void listMessage() {
        ArrayList<Message> messagesList = DAOMessages.readMessagesDB();

        for (Message currentMessage:messagesList) {
            System.out.println("ID: " + currentMessage.getMessageID());
            System.out.println("Message: " + currentMessage.getMessage());
            System.out.println("Author: " + currentMessage.getMessageAuthor());
        }
        
    }

Se le mezclaron las capas puede ser? La parte de mostrarlo no deber铆a hacerlo en MensajesService?

bue d铆a equipo, quiero hacer mi aporte, a煤n estoy algo nuevo en Java, pero hay algo que me llam贸 la atenci贸n es el hecho de que imprime los mensajes en el Dao, yo por el contrario he decidio devolver un array list de mensajes para hacer f谩cil su manipulaci贸n en el service, por favor, denme su feedback para saber si todo qued贸 bien, gracias

MessageDao

public static ArrayList<Message> getMessages() {
        DBConnection dbConnection = new DBConnection();
        ArrayList<Message> messages = new ArrayList<>();
        try (Connection conn = dbConnection.getConnection()) {
            PreparedStatement ps = null;
            try {
                ResultSet rs = null;
                String query = "SELECT * FROM messages";
                ps = conn.prepareStatement(query);
                rs = ps.executeQuery();

                while (rs.next()) {
                    Message message = new Message();
                    message.setId(rs.getInt("id"));
                    message.setMessage(rs.getString("message"));
                    message.setAuthor(rs.getString("author"));
                    messages.add(message);
                }
            } catch (SQLException ex) {
                System.out.println(ex);
            }
        } catch (SQLException e) {
            System.out.println(e);
        }

        return messages;
    }

MessageService

public static void listMessages() {
        ArrayList<Message> messages = MessageDAO.getMessages();
        if (messages.size() == 0) {
            System.out.println("no messages");
            return;
        }

        for (Message message : messages) {
            System.out.println("id: " + message.getId());
            System.out.print("| author: " + message.getAuthor());
            System.out.print("| message: " + message.getMessage());
        }
    }

El objeto conexion, teniendo en cuenta que se usa en mas de un llamado鈥o seria mejor dejarlo static? para el alcance de los metodos de esa clase?

Estupenda clase instructor Santiago, se entienden claramente los pasos a seguir para desarrollar el m茅todo de lectura de datos.

Me encanto esta clase!!!

Que lindo poder ir adquiriendo conocimientos nuevos!!
Ac谩 muestro los datos con un JOptionPanel .馃槉

隆Hola t煤!
Quiz谩s viste que lo ideal es que se impriman los datos desde la capa del servicio, ya que como est谩 en el v铆deo est谩 imprimiendo los datos desde la capa de DAO, as铆 que cambi茅 un poco el c贸digo para imprimir los datos desde la capa de servicio, as铆 que lo realic茅 de esta forma por si te interesa:
MessageDAO

public static ArrayList readMessageDB(){
        Database connection = new Database();
        PreparedStatement ps = null;
        ResultSet results = null;
        ArrayList<Message> listReturn = new ArrayList<>();
        try (Connection cnx = connection.GetConnection()){
            String query = "SELECT * FROM MESSAGES";
            ps = cnx.prepareStatement(query);
            /* Este m茅todo es similar a executeUpdate, la diferencia es que Query no tiene transacci贸n,
            * es decir, solo se piden datos */
            results = ps.executeQuery();
            while(results.next()){
                int id_message = results.getInt("ID_MESSAGE");
                String message = results.getString("MESSAGE");
                String author = results.getString("AUTHOR_MESSAGE");
                String datetime = results.getString("DATETIME_MESSAGE");
                Message messageObject = new Message(id_message, message, author, datetime);
                listReturn.add(messageObject);
            }
            return listReturn;
        }
        catch (SQLException e){
            System.out.println("Unexpected error: "+e);
            return listReturn;
        }
    }

listMessage

public static void listMessage() {
        ArrayList result = MessageDAO.readMessageDB();
        /* Itera el ArrayList con el m茅todo toString con polimorfismo */
        for (Object element: result) {
            System.out.println(element);
        }
        System.out.println("\n");
    }

Tambi茅n apliqu茅 polimorfismo en la clase Message para el m茅todo toString:
Message

@Override
    public String toString() {
        return
                "ID: " + getId_message() + "\n" +
                "Message: " + getMessage() + "\n" +
                "Autor: " + getAuthorMessage() + "\n" +
                "Datetime: " + getDatetimeMessage() + "\n";
    }

Me est谩 gustando el curso, he ido implementando las sugerencias de estudiantes m脿s avanzados. Gracias.


Yo la parte de la impresi贸n en pantalla la hice en el service

CRUD
C -> Create
R -> Read
U -> Update
D -> Delete

Si a alguien le dio error en lo de la fecha se puede realizar lo siguiente, mejorando un poco m谩s el c贸digo:

Esta es la parte de la inserci贸n de datos. (MensajesDAO.java)

String sql = "INSERT INTO mensajes (mensaje, autor_mensaje, fecha_mensaje) VALUES ('"+ mensaje.getMensaje() + "', '"+ mensaje.getAutorMensaje() +"', '"+ mensaje.getFechaMensaje() +"') ";
				statement = conexion.prepareStatement(sql);
				statement.execute(sql);
				System.out.println("Mensaje creado correctamente");

Hay que modificar la fecha en la clase de Mensajes.java

private LocalDateTime fechaMensaje;

// getters and setters
public LocalDateTime getFechaMensaje() {
		return fechaMensaje;
	}
	public void setFechaMensaje(LocalDateTime fechaMensaje) {
		this.fechaMensaje = fechaMensaje;
	}

Y en MensajesServices.java

Mensajes registro = new Mensajes();
		registro.setMensaje(mensaje);
		registro.setAutorMensaje(nombre);
		registro.setFechaMensaje(LocalDateTime.now());
		MensajesDAO.crearMensajeDB(registro);

Tambi茅n a la hora de listar se utiliza lo siguiente, para que la fecha aparezca tal cual.

System.out.println("Fecha: " + rs.getTimestamp("fecha_mensaje").toLocalDateTime());

Para solucionar que la capa DAO no se encargue de mostrar los mensajes sino esto lo haga la capa de servicio hice que el metodo listarMensajesDB() devolvier谩 un ArrayList<Mensajes> y que dentro en lugar de imprimir el contendio de rs se creara un mensaje y se almacenara en el arraylist.

Asi luego se recibia ese arraylist en la capa de servicio y se muestra como uno desee.

Me encanta todo el curso, muchas gracias

Excelente curso esta super explicado

Listo!

Genial.

Listo 馃槂

muy Buena Clase

馃槃 me quedo con esto de la persistencia de datos we q interesant

Excelente, nose porque tenia la noci贸n de que java iba a devolver un arreglo (que lo hace) y tocar铆a recorrerlo con foreach, desconoc铆a esta funci贸n.

Llegando a ver los datos, pero siento que algunas explicaciones se contradicen con otros cursos.

como que se repite lo de leer mensaje