Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Duda] Realizando mejoras en el proyecto (NO REALIZA LO QUE DICE EL TUTOR)

Buenas tardes, nuevamente estoy aqui con una duda acerca del ejercicio del tema "Realizando mejoras en el proyecto", ya que al realizar el SQL inyección, y presiono el botón "Guardar" me está botando el sigueinte error, para ver si me ayudan a solucionarlo, muchas gracias, adjunto le dejo la ejecución de la ventana de la aplicación y el error:

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 at com.alura.jdbc.view.ControlDeStockFrame.guardar(ControlDeStockFrame.java:276) at com.alura.jdbc.view.ControlDeStockFrame$1.actionPerformed(ControlDeStockFrame.java:130) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405) at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6635) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342) at java.desktop/java.awt.Component.processEvent(Component.java:6400) at java.desktop/java.awt.Container.processEvent(Container.java:2263) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370) at com.alura.jdbc.controller.ProductoController.ejecutaRegistro(ProductoController.java:109) at com.alura.jdbc.controller.ProductoController.guardar(ProductoController.java:92) at com.alura.jdbc.view.ControlDeStockFrame.guardar(ControlDeStockFrame.java:274) ... 36 more

1 respuesta
solución!

Hola Luis,

El error que indica que hay un problema con la sintaxis de tu consulta SQL. Esta línea en particular:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Sin embargo, en el ejemplo de la lección, el instructor utiliza PreparedStatement para evitar problemas de inyección SQL. PreparedStatement maneja automáticamente el escape de caracteres especiales y ayuda a prevenir errores de sintaxis y vulnerabilidades de inyección SQL.

Aquí está un ejemplo:

PreparedStatement statement = connection.prepareStatement("INSERT INTO PRODUCTO (nombre, descripción, cantidad) VALUES (?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
statement.setString(1, producto.get("NOMBRE"));
statement.setString(2, producto.get("DESCRIPCION"));
statement.setInt(3, Integer.valueOf(producto.get("CANTIDAD")));

En este ejemplo, los signos de interrogación (?) son marcadores de posición para los valores que se insertarán en la consulta. Los valores reales se establecen llamando a los métodos setString y setInt en el objeto PreparedStatement.

Aquí hay el proyecto avanzado para analizar más detalles.

Espero haber ayudado y buenos estudios! Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.

¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios