A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

CRUD: inserci贸n de datos

11/25
Recursos

Aportes 39

Preguntas 7

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Algo que puede mejorar un poco el rendimiento de la aplicacion son los patrones de dise帽o, en este caso para no estar creando una conexi贸n de la base de datos en cada operaci贸n CRUD, se puede hacer un patron singleton para que verifique si ya existe el objeto creado y no crear mas instancias y con eso ahorrar memoria, este enfoque depende tambi茅n de la cantidad de usuarios que se vayan a conectar, ya que si hay m谩s usuarios, muy probablemente la conexi贸n se deba hacer mediante un pool de conexiones.

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

Un detalle nomas insignificante , el case 3 es el 4 y el 4 es el 3.

鈥淓n inform谩tica, CRUD es el acr贸nimo de 鈥淐rear, Leer, Actualizar y Borrar鈥 (del original en ingl茅s: Create, Read, Update and Delete), que se usa para referirse a las funciones b谩sicas en bases de datos o la capa de persistencia en un software.鈥

Ese hermoso momento en que todo funciona como deber铆a funcionar y el c贸digo hace lo que debe hacer. Ese momento define un momento de felicidad.

Que hay, al parecer no fui el unico con el problema de la fecha en el constructor, al momento de ingresar el query, deberan dejar la variable fecha_mensaje y en el valor deberan poner la fecha actual capturada

String query= 鈥淚NSERT INTO mensajes (mensaje, autor_mensaje, fecha_mensaje) VALUES (?,?, CURRENT_DATE())鈥

Espero haber ayudado con ese problema que me tenia atorado y seguro a alguno de uds igual lo tendra

驴Aqu铆 tambi茅n es donde se puede usar los procedimientos almacenados?

Excelente curso del CRUD

Definicion del metodo 鈥楾ry Catch鈥 segun wikipedia: Try se utiliza cuando se desean prever excepciones en el transcurso de la ejecuci贸n de un programa. Es necesario ya que ah铆 se colocan las instrucciones que se desean realizar pese a la excepci贸n, posteriormente se usa un catch donde se especifica la excepci贸n que se sabe puede ocurrir.
https://es.wikibooks.org/wiki/Programaci贸n_en_Java/Sentencia_try

Muy buena clase y explicaci贸n !

Excelso!

Como aporte, podrian usar el siguiente repositorio que permite hacer esos try catch que ensucian el codigo con lambdas.
https://mvnrepository.com/artifact/io.vavr/vavr/0.10.3

ejemplo de implementacion:

Try.of( () -> mensajeService.createMensaje(new Mensaje("this is a new message"
                        , LocalDateTime.now().toString()
                        , "Slasher"))
        ).onFailure(Throwable::printStackTrace);

1:20 no entiendo esto de java 驴Se pasa la declaraci贸n de una variable en el try? umm 驴por qu茅 un try tiene para metros exactamente?

magnifico

Excelente

Agradezco que el curso sea full practica, siendo nuevo, siento que estoy avanzando, incluso pude identificar algunos inconvenientes adrede realizador por el profesor, que desde mi posici贸n, puedo identificar y eso me motiva a seguir estudiando y saber que estoy aprendiendo, Gracias Profe!.

No lei los comentarios sino hasta que ya lo hab铆a terminado, resolv铆 hacerlo con un singleton.

package com.reymar.persistencia_datos;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConexionBD {

	private static Connection connection = null;
	
	public static Connection getConnection() {
		if (connection != null)	return connection;
		
		try {
			String url = "jdbc:mysql:// localhost:3306/org";
			String database = "mensajes_app";
      String user = "root";
      String pass = "";
        
			// Si el programa se cierra se ejecuta getClose
			Runtime.getRuntime().addShutdownHook(new getClose());
			connection = DriverManager
					.getConnection(url.concat(database), user, pass);
			
			return connection;
			
		} catch (SQLException e) {
			throw new RuntimeException("Error al conectarse a la DB %s", e);
		}
	}
	
	static class getClose extends Thread{
		@Override
		public void run() {
			try {
				Connection connection = ConexionBD.getConnection();
				connection.close();
			} catch (SQLException e) {
				throw new RuntimeException(e);
			}
		}
	}

}

Por que usar Prepared Statement en nuestro codigo?
Me llama la atenci贸n la definici贸n que da oracle acerca de esta interface que nos permite ejecutar eficientemente nuestra sentencia sql y evitar ataques sql.
Interface PreparedStatement
An object that represents a precompiled SQL statement.

A SQL statement is precompiled and stored in a PreparedStatement object. This object can then be used to efficiently execute this statement multiple times.

Note: The setter methods (setShort, setString, and so on) for setting IN parameter values must specify types that are compatible with the defined SQL type of the input parameter. For instance, if the IN parameter has SQL type INTEGER, then the method setInt should be used.

If arbitrary parameter type conversions are required, the method setObject should be used with a target SQL type.

Tomado de Oracle

Porque un try dentro de otro try sabiendo que con el primero se puede controlar las excepciones, quedo en duda de esta clase con las malas practicas de programaci贸n. Al igual de hacer una conexi贸n para cada query se debe hacer una conexi贸n global. Y los m茅todos de las clases static tambi茅n son muy mala practica de programaci贸n.

Muy bueno, estar铆a excelente un curso de PLSQL para procedimientos almacenados ya que en mi trabajo ven como mala practica colocar los querys en el c贸digo.

Estupenda clase instructor Santiago, sobre inserci贸n de datos y desarrollo de avisos en caso de 茅xito o error.

Buen curso !

Esto fue tan genial!!!

Listo 馃槂

Excelente Curso, muy practico, esto sirve para aprender, genial

Simplemente genial.

Tuve algunos problemas, pero fueron por ejemplo guardando el nombre en el registro lo hice mal y pues me salia null :v. Al final envio el mensaje correctamente.

隆Es como magia!
Estaba intentando hacer lo mismo con PHP sin embargo ten铆a un error en la conexi贸n con la base de datos, ahora haci茅ndolo con Java, es una maravilla.

Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.5.0:exec (default-cli) on project mensajes_app: Command execution failed. Process exited with an error: 1 (Exit value: 1) -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

me aparece ese mensaje, hice todo igual , uso sqlworkbench y netbeans ayuda por favor

Interesante la clase, investigue un poco por fuera, y aprend铆 que los prepared statement son funciones de la base de datos no del lenguaje, algo que de verdad desconoc铆a.

Orale wey por fin el tan esperado momento de enviarle a una base de datos inf we :v

Les dej贸 est谩 peque帽a anotaci贸n que yo agregu茅 en mis apuntes. Quiz谩s a alguno le interese tenerla.
En computaci贸n CRUD es el acr贸nimo de Crear, Leer, Actualizar y borrar (Create, Read, Update and Delete). Se usa para referirse a las funciones b谩sicas en bases de datos o la capa de persistencia en un software.

Me sale este erro

java.sql.SQLException: The server time zone value 'unknown' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
Exception in thread "main" java.lang.NullPointerException
	at com.cursobdd.mensajes_app.MensajesDAO.crearMensajeDB(MensajesDAO.java:24)
	at com.cursobdd.mensajes_app.MensajesService.crearMensaje(MensajesService.java:30)
	at com.cursobdd.mensajes_app.Inicio.main(Inicio.java:36)
Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
	at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:404)
	at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166)
	at org.codehaus.mojo.exec.ExecMojo.executeCommandLine(ExecMojo.java:764)
	at org.codehaus.mojo.exec.ExecMojo.executeCommandLine(ExecMojo.java:711)
	at org.codehaus.mojo.exec.ExecMojo.execute(ExecMojo.java:289)
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
	at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)```

[email protected], hice este peque帽o diagrama conectando los 5 archivos .java que hemos creado hasta ahora.
Espero les ayude, porque para algunos este tema de persistencia de datos es nuevo y un poco enredado 馃槈. Saludos!!

![Create Method](

Super cool!


Saben qu茅 debo hacer para que me salga la fecha?

Me esta gustando demasiado el curso, pero estar铆a bien que explicara mas a fondo los m茅todos que estamos utilizando de las librer铆as descargadas

La clase m谩s los aportes me ayudan mucho.

lo modifique un poco xq me volvio loco y no me andaba. Asi lo pude hacer andar en Intellij (cambie xq me volvio loco node, no me gusta jaja

<code>
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class MensajesDAO {
    public static void crearMensajeDB(Mensaje mensaje) {
        Conexion cnx = new Conexion();

        try (Connection connection = cnx.getConnection()) {
            final String query = "INSERT INTO mensajes (mensaje, autor_mensaje) VALUES (?,?)";

            PreparedStatement ps = connection.prepareStatement(query);
            ps.setString(1, mensaje.getMensaje());
            ps.setString(2, mensaje.getAutor());
            ps.executeUpdate();

            System.out.println("Mensaje Creado Piola");
        } catch (SQLException e) {
            System.out.println(e);
        }
    }

)