Foros del Web » Programación para mayores de 30 ;) » Java »

Error

Estas en el tema de Error en el foro de Java en Foros del Web. Muy buenas. Tengo un problema y es el siguiente: java.lang.NumberFormatException for input string: 123. Se que es por incompatibilidad del dato enviado a la base ...
  #1 (permalink)  
Antiguo 07/11/2014, 14:03
 
Fecha de Ingreso: abril-2012
Ubicación: Malaga
Mensajes: 46
Antigüedad: 12 años, 1 mes
Puntos: 0
Error

Muy buenas.
Tengo un problema y es el siguiente:
java.lang.NumberFormatException for input string: 123.

Se que es por incompatibilidad del dato enviado a la base de datos, pero el caso es que hago bien (o creo hacerlo bien xD) la conversión de string a int y me sigue saliendo.
También sé que hay muchos post relacionados con el mío, pero me he leído unos cuántos y no he podido solucionarlo.
Os dejo el código para que lo entendáis mejor.

Código Java:
Ver original
  1. private void btGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                          
  2.              
  3.        try
  4.        {
  5.             String nombre,direccion,telefonoS,ciudad,sueldoS,idS,puesto;
  6.             int id,telefono;
  7.             double sueldo;
  8.             nombre = this.tfNombre.getText();
  9.             direccion = this.tfDireccion.getText();
  10.             telefonoS = this.tfTelefono.getText();
  11.             ciudad = (String)this.cbCiudad.getSelectedItem();
  12.             sueldoS = this.tfSueldo.getText();
  13.             idS = this.tfID.getText();
  14.             puesto = this.tfPuesto.getText();
  15.             mostrarMensaje(idS);
  16.            if(nombre.equals("")|| puesto.equals("")|| direccion.equals("")||telefonoS.equals("")|| ciudad.equals("")|| sueldoS.equals("")|| idS.equals(""))
  17.            {
  18.                mostrarMensaje("Error, todos los campos deben estar escritos.");
  19.            }
  20.            else
  21.            {
  22.                
  23.                
  24.                try
  25.                {
  26.                 id = Integer.parseInt(idS);
  27.                 telefono = Integer.parseInt(telefonoS);
  28.                 sueldo = Double.parseDouble(sueldoS);
  29.                 Class.forName("com.mysql.jdbc.Driver");
  30.                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bdempleados","","");
  31.                Statement stmt=(Statement)con.createStatement();
  32.                String sql = "insert into trabajadores(ID,Nombre,Direccion,Ciudad,Telefono,Sueldo,Puesto)values"+"("+id+",'"+nombre+"','"+direccion+"','"+ciudad+"',"+telefono+","+sueldo+",'"+puesto+"')";
  33.                stmt.executeUpdate(sql);
  34.                mostrarMensaje("Empleado guardado correctamente");  
  35.                }catch(NumberFormatException e2)
  36.                {
  37.                    mostrarMensaje("Error de conexion\n"+e2);
  38.                }
  39.        
  40.            }
  41.            
  42.        }catch(Exception e)
  43.        {
  44.            mostrarMensaje("Debe introducir todos los campos\n"+e);
  45.        }

Gracias de antemano.

Saludos
  #2 (permalink)  
Antiguo 07/11/2014, 14:44
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Error

Busca la línea 123.

Un numberFormatException es que estás intentando convertir a número algo que no es número, y eso no lo controlas en ningún momento. Si en telefono, sueldo o id hay un espacio en blanco o una letra dará error, y si en sueldo no pones el separador decimal correcto también. Dependiendo del Locale será "." o ",", en español es ","
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 07/11/2014, 15:35
 
Fecha de Ingreso: abril-2012
Ubicación: Malaga
Mensajes: 46
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Error

En las líneas 10, 12 y 13 lo cojo como string para poder validarlo.
Después en las líneas 26, 27 y 28 lo convierto en int y double.
  #4 (permalink)  
Antiguo 07/11/2014, 18:12
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Error

Lo vuelvo a repetir, tú no validas que algo sea un número, sólo validas que los campos no sean "". Si en el campo telefono escribieses "555-4567" ibas a tener un numberformatexception.

Así que según tu mensaje de error no acepta el valor "123." Como ya te he dicho la opción más lógica es que esté fallando en el double ya que para Locale español los decimales se marcan con ",", pero sólo me puedo basar en que veo un 123. en el error que has puesto. Tú sabrás de donde sale.

De hecho, teniendo en cuenta que la excepción la recoges con un método que aparentemente no pinta la excepción entera, ni siquiera se puede decir que esa sea la parte del código donde está el problema. Si dejas que pinte la traza del error entera podrás ver exactamente en que línea está el error.

Cita:
Exception in thread "main" java.lang.NumberFormatException: For input string: "xxx"
at java.lang.NumberFormatException.forInputString(Num berFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at VRP.main(VRP.java:43)
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 08/11/2014, 12:32
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error

Buenas,

Aparte de lo que bien dice Xerelo, quería hacer un comentario sobre ésto:

telefono = Integer.parseInt(telefonoS);
sueldo = Double.parseDouble(sueldoS);

El número de teléfono no debería ser un Integer, ya que no se va a tratar nunca como un número. No vas a hacer operaciones con él como sumas o restas. Lo que si que probablemente vas a hacer es aplicarle patrones de búsqueda para buscar los que contienen cierto número o comienzan por un prefijo determinado.
Por eso debería ser un String.

Double no es útil para trabajar con monedas ya que tiene problemas de redondeo, al igual que Float. Para cantidades de dinero se debe utilizar BigDecimal o, mejor aún, un Integer/Long de céntimos.


Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: mysql, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:53.