0

Tengo este código que es el formulario de mi ventana para ingresar un mozo a una base de datos que esta creada desde wamp.

El problema es que no me envía la consulta, la conexión parece estar bien

Les dejo el código por aquí

package Ventanas;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import Clases.BaseDatos;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.awt.Color;
import javax.swing.JTextPane;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;

public class ingresoMozo extends JFrame {

    private JPanel contentPane;
    private BaseDatos Palomos=null;
    private JTextField txtCed;
    private JTextField txtNom;
    private JTextField txtApe;

    private JTextField txtSueldo;
    private JTextField txtTel;
    private BaseDatos coco;

    /**
     * Launch the application.
     */

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ingresoMozo frame = new ingresoMozo();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ingresoMozo() {
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
        setBounds(100, 100, 650, 650);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblCedula = new JLabel("C\u00E9dula");
        lblCedula.setBounds(23, 99, 46, 14);
        contentPane.add(lblCedula);

        JLabel lblNombre = new JLabel("Nombre");
        lblNombre.setBounds(23, 124, 46, 14);
        contentPane.add(lblNombre);

        JLabel lblApellido = new JLabel("Apellido");
        lblApellido.setBounds(23, 150, 46, 14);
        contentPane.add(lblApellido);

        JLabel lblTelfono = new JLabel("Tel\u00E9fono");
        lblTelfono.setBounds(23, 176, 46, 14);
        contentPane.add(lblTelfono);

        JLabel lblMozoAadidoCorrectamenteerror = new JLabel("Mozo a\u00F1adido correctamente/error");
        lblMozoAadidoCorrectamenteerror.setFont(new Font("Tahoma", Font.PLAIN, 14));
        lblMozoAadidoCorrectamenteerror.setBounds(23, 239, 219, 20);
        contentPane.add(lblMozoAadidoCorrectamenteerror);

        JLabel lblIngresarMozo = new JLabel("Datos de mozo");
        lblIngresarMozo.setFont(new Font("Tahoma", Font.BOLD, 14));
        lblIngresarMozo.setBounds(49, 52, 112, 20);
        contentPane.add(lblIngresarMozo);

        JLabel lblIngresoDeMozo = new JLabel("Ingreso de mozo");
        lblIngresoDeMozo.setFont(new Font("Tahoma", Font.BOLD, 16));
        lblIngresoDeMozo.setBounds(260, 11, 160, 28);
        contentPane.add(lblIngresoDeMozo);

        txtCed = new JTextField();
        txtCed.setBounds(78, 100, 129, 20);
        contentPane.add(txtCed);
        txtCed.setColumns(10);

        txtNom = new JTextField();
        txtNom.setBounds(78, 125, 129, 20);
        contentPane.add(txtNom);
        txtNom.setColumns(10);

        txtApe = new JTextField();
        txtApe.setBounds(78, 150, 129, 20);
        contentPane.add(txtApe);
        txtApe.setColumns(10);

        String cedula, telefono;
        String nombre, apellido;
        nombre=txtNom.getText().toString();
        apellido=txtApe.getText().toString();
        cedula=txtCed.getText().toString();
        Integer ced=Integer.parseInt(cedula);
        telefono=txtTel.getText().toString();
        Integer tel=Integer.parseInt(telefono);

        String consulta1 = "INSERT INTO 'personas'('nombre', 'apellido', 'telefono', 'ci') VALUES ('" + nombre + "', '" + apellido + "' ,'" + tel + "', '" + ced + "');";


        JButton btnAceptar = new JButton("Aceptar");
        btnAceptar.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {



                    coco.ejecutar(consulta1);




        }});


        btnAceptar.setBounds(104, 285, 89, 23);
        contentPane.add(btnAceptar);

        JButton btnLimpiarDatos = new JButton("Limpiar datos");
        btnLimpiarDatos.setBounds(260, 285, 112, 23);
        contentPane.add(btnLimpiarDatos);

        JLabel lblSueldo = new JLabel("Sueldo");
        lblSueldo.setBounds(23, 201, 46, 14);
        contentPane.add(lblSueldo);

        txtSueldo = new JTextField();
        txtSueldo.setBounds(78, 198, 129, 20);
        contentPane.add(txtSueldo);
        txtSueldo.setColumns(10);

        txtTel = new JTextField();
        txtTel.setBounds(75, 173, 86, 20);
        contentPane.add(txtTel);
        txtTel.setColumns(10);

    }
}

Les dejo mi clase de Base de datos que tengo la conexion y la funcion para ejecutar una consulta

public Connection getConexion() {
    return conexion;
}    

public void setConexion(Connection conexion) {
        this.conexion = conexion;
} 

public boolean ejecutar(String sql) {
    try {
        Statement sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        sentencia.executeUpdate(sql);
        sentencia.close();
    } catch (SQLException e) {
        e.printStackTrace();
        return false;
    }     
    return true;
}

El error que me aparece en pantalla es

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at Ventanas.ingresoMozo.(ingresoMozo.java:144) at Ventanas.Indice$1.mouseClicked(Indice.java:53) at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

3 Answers3

0

Prueba a escribir la consulta con comillas simples en vez de con apóstrofe:

String consulta1 = "INSERT INTO 'personas'('nombre', 'apellido', 'telefono', 'ci') VALUES ('" + nombre + "', '" + apellido + "' ,'" + tel + "', '" + ced + "');";
Awes0meM4n
  • 2,210
  • 1
  • 9
  • 28
  • me dice error null0 desde el catch de exception me dice se ha encontrado este error: null0 por lo menos ahora me entra a los catchs y me dice algo antes me saltaban muchisimas lineas en rojo de consola – Facundo Lupacchino Oct 26 '16 at 08:39
  • ¿Has comprobado que los valores estén asignados y no sean cadenas vacías? Podrías tener alguna restricción en tu definición de tabla. Me huele a fallo de parseo en los valores `ced` o `tel` – Awes0meM4n Oct 26 '16 at 09:10
  • Soy estudiante recién empece hace poco y no encontrado otra manera de pasar el valor de String a int sin ser el Integer, ¿hay alguna otra manera?, lo que tu me dices es que no se esta convirtiendo bien el valor a int ¿verdad? – Facundo Lupacchino Oct 26 '16 at 09:27
  • ¿Puedes decirme cuál es exactamente la línea 144 de `Ventanas.ingresoMozo`? – Awes0meM4n Oct 26 '16 at 11:34
0

Según el stack trace que tienes, parece que tu error viene de aquí:

cedula=txtCed.getText().toString();
Integer ced=Integer.parseInt(cedula); // <-- aquí
telefono=txtTel.getText().toString();
Integer tel=Integer.parseInt(telefono); // <-- o aquí

Puedes identificar más precisamente cuál de las 2 es al examinar más cuidadosamente el stack trace y ver cuál es la línea 144:

Ventanas.ingresoMozo.(ingresoMozo.java:144) at

Como el mensaje de error dice:

java.lang.NumberFormatException: For input string: ""

...aparentemente el valor de cedula o telefono es un string vacío, por lo que no puede convertirlo en un entero.

Te va a tocar manejar ese caso especial para evitar el error.

De paso, ya que veo que estás concatenando los valores directamente en tu SQL, te sugiero repasar la información siguiente: ¿Qué es la inyección SQL y cómo puedo evitarla?

sstan
  • 16,591
  • 2
  • 21
  • 45
0

Tu error es del codigo Java y no del insert en tu base de datos... el Logcat claramente dice :

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at Ventanas.ingresoMozo.(ingresoMozo.java:144)

Esto quiere decir que en algun lugar de tu codigo (especificamente linea 144) estas haciendo un Integer.parseInt incorrecto

try{
   int numTelefono = Integer.parseInt(telefono);
}catch(NumberFormatException ex){ 
   System.out.println("Los datos que ingresaste a telefono son incorrectos...");
}

Debes verificar bien tu tipo de datos que tienes para tus campos, veo un telefono y cedula, estos campos generalmente se configuran como varchar (en BD) y/o string (En codigo) ya que sus valores no son aptos para cálculos matemáticos, si no que son para identificar y diferenciar de unos con otros....

sioesi
  • 11,365
  • 5
  • 20
  • 55