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

Obtener valor max de jTxt en java y PostgreSQL

Estas en el tema de Obtener valor max de jTxt en java y PostgreSQL en el foro de Java en Foros del Web. Tengo que obtener el valor maximo de mi columna id para ingresar un valor superior al maximo en un txt_codigo, pero al navegar con .nex ...
  #1 (permalink)  
Antiguo 25/01/2015, 13:14
 
Fecha de Ingreso: enero-2015
Mensajes: 14
Antigüedad: 9 años, 10 meses
Puntos: 0
Obtener valor max de jTxt en java y PostgreSQL

Tengo que obtener el valor maximo de mi columna id para ingresar un valor superior al maximo en un txt_codigo, pero al navegar con .nex y .previous, su valor queda en un numero ya existente y no puedo guardar en mi bd ya que mi id es autonumerico y mi txt_codigo pongo ineditable y si pongo con comillas mi txt_codigo me da error ya que mi id es int.

Este es el formulario que estoy haciendo y me sale ese error si pongo un "" en txt_codigo para desabilitar y hacer automatico mi numeracion.


Código Java:
Ver original
  1. try{
  2.             Conexion conexion = new Conexion();
  3.             PreparedStatement instruccion=conexion.conexion.prepareStatement("INSERT INTO \"public\".\"Persona\"  VALUES (?,?,?)");
  4.            
  5.            //En la variable ultimonum intento guardar el ultimo numero que obtengo de mi id pero al setear en la ubicacion 1 me da error por tipo de variable diferente
  6.  
  7.             PreparedStatement ultimonum=conexion.conexion.prepareStatement("SELECT MAX(" per_codigo") AS maximo FROM "\"public\".\"Persona\"");
  8.             instruccion.setInt(1, Integer.parseInt(ultimonum.getText()));
  9.             instruccion.setString(2, txt_nombre.getText());
  10.             instruccion.setString(3, txt_telefono.getText());
  11.             instruccion.executeUpdate();
  12.            
  13.             JOptionPane.showMessageDialog(null, "Registro Guardado");
  14.             bloquear();
  15.        }catch(Exception e){
  16.            JOptionPane.showMessageDialog(null, "Problema al guardar"+e);
  17.        }

Última edición por roeboy2; 25/01/2015 a las 13:31 Razón: no aparece img
  #2 (permalink)  
Antiguo 25/01/2015, 14:02
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 14 años
Puntos: 24
Respuesta: Obtener valor max de jTxt en java y PostgreSQL

No entendí nada. Por favor, vuelve a describir tu problema con más calma. Y usa los signos de puntuación: comas, puntos, etc.
  #3 (permalink)  
Antiguo 25/01/2015, 15:22
 
Fecha de Ingreso: enero-2015
Mensajes: 14
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Obtener valor max de jTxt en java y PostgreSQL

Quiero hacer un ABM con 3 columnas en un bd en PosgreSQL con id autonumerico.
Con el jTextField del id disable. Como puedo agregar mas registros? sin que me salga el error (Error:For imput String:"") ya que al poner el jTextField con un valor "" a traves de un boton nuevo me da ese error.

Entonces mi idea fue obtener el maximo valor del id con un SELECT MAX(id) y poner en jTextField un valor superior al obtenido y asi poder guardar
  #4 (permalink)  
Antiguo 25/01/2015, 16:26
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 14 años
Puntos: 24
Respuesta: Obtener valor max de jTxt en java y PostgreSQL

¿Y por qué no dejas que el gestor de base de datos sea quien se encargue de colocar el valor del id?
Hay varias formas de hacerlo en PostgreSQL, luego sólo debes hacer lo siguiente en tu código Java.
Código Java:
Ver original
  1. PreparedStatement instruccion = conexion.conexion.prepareStatement("INSERT INTO \"public\".\"Persona\" (columna_nombre, columna_telefono) VALUES (?,?)");
  2. instruccion.setString(1, txt_nombre.getText());
  3. instruccion.setString(2, txt_telefono.getText());
  4. instruccion.executeUpdate();

Salu2.
  #5 (permalink)  
Antiguo 25/01/2015, 19:11
 
Fecha de Ingreso: enero-2015
Mensajes: 14
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Obtener valor max de jTxt en java y PostgreSQL

Pasa que tengo en mi formulario botones para navegar: siguiente - anterior y con esos me muestra mi id, nombre y telefono perfectamente, no hay problema en eso.
Mi problema es que cuando me posiciono en cualquier registro me muestra en mi txt_id el codigo de mi registro y con un boton NUEVO limpio las 3 cajas de texto con "", pero mi txt_id esta en modo disable ya que lo uso solo para visualizar los id´s de los registros y me queda solo la txt_nombre y txt_telefono para llenar y poniendo guardar me sale un error porque el toma el valor "" y tiene que ser un int, eso se entiende.
Ahora mi idea es obtener el valor MAX de mi id_codigo +1 e insertar en mi caja txt_id para que no tenga duplicidad de mi pk.

Y esta es la imagen de mi formulario.



Por cierto mi codigo para buscar el MAX valor es:
Código Java:
Ver original
  1. String ultimonum = ("SELECT MAX('per_codigo') FROM \"public\".\"Persona\"");
  2. PreparedStatement ultimonum=conexion.conexion.prepareStatement(ultimonum);

Pero mi problema esta en cómo guardar en txt_id el resultado de ultimonum. Gracias por las respuestas y saludos

Última edición por roeboy2; 25/01/2015 a las 19:28
  #6 (permalink)  
Antiguo 25/01/2015, 22:06
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 14 años
Puntos: 24
Respuesta: Obtener valor max de jTxt en java y PostgreSQL

Te estás complicando sin motivo alguno. ¿Intentaste realizar la solución que te dije?
¿O al menos te has puesto a pensar en que el enfoque que le estás dando no es el adecuado?
Cita:
Ahora mi idea es obtener el valor MAX de mi id_codigo +1 e insertar en mi caja txt_id para que no tenga duplicidad de mi pk.
Es ineficiente. Eso lo debería hacer el motor de base de datos.

Haz que la columna "id" de la tabla "personas" sea autoincremental, te pasé un enlace con varias formas para lograrlo. Y cuando hagas el INSERT desde tu aplicación, sólo envía a la base de datos los valores de nombre y teléfono. La base de datos automaticamente le colocará el valor al id. Problema resuelto.
  #7 (permalink)  
Antiguo 25/01/2015, 23:39
 
Fecha de Ingreso: enero-2015
Mensajes: 14
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Obtener valor max de jTxt en java y PostgreSQL

Te agradezco por las respuestas y disculpa mi terquedad y efectivamente haciendo como dices: solo guardar los 2 campos funciona perfecto ya que mi bd esta configurado para autoincrementar.
Pero al navegar por mi tabla persona con boton siguiente y atras me posiciono en un registro "x", y en los 3 campos visualizo los valores... hasta ahi perfecto, cuando trato de agregar un nuevo registro con un boton nuevo los 3 campos hago que esten vacios con un "" y el campo codigo pongo en disable para que la bd de datos ponga un valor por mi y completo 2 campos restantes. Ahí es que me aparece el error ya que se agregó como codigo "" y esas comillas la bd entiende como string y para que esto no ocurra quiero obtener el valor mayor de mi codigo y sumarle 1 numero para agregar.

Código Java:
Ver original
  1. try{
  2.             Conexion conexion = new Conexion();
  3.             PreparedStatement instruccion=conexion.conexion.prepareStatement("INSERT INTO \"public\".\"Persona\"  VALUES (?,?,?)");
  4.                                
  5.             //lo correcto es este si se inserta manualmente un id
  6.             instruccion.setInt(1, Integer.parseInt(txt_codigo.getText()));
  7.  
  8.             //Pero yo quiero obtener el valor maximo de mi id a través de la variable ultimonumero para agregar a mi txt_codigo, pero mi no reconoce ni como string ni como int ese valor obtenido... como soluciono?...
  9.             Statement ultimonumero= conexion.conexion.createStatement();
  10.             ultimonumero.executeUpdate("SELECT MAX('per_codigo')+1 FROM \"public\".\"Persona\"");
  11.             instruccion.setInt(1, Integer.parseInt(ultimonumero.getText()));
  12.             instruccion.setString(2, txt_nombre.getText());
  13.             instruccion.setString(3, txt_telefono.getText());
  14.             instruccion.executeUpdate();
  15.            
  16.             JOptionPane.showMessageDialog(null, "Registro Guardado");
  17.             bloquear();
  18.        }catch(Exception e){
  19.            JOptionPane.showMessageDialog(null, "Problema al guardar"+e);
  20.        }

Y disculpen mi terquedad...
  #8 (permalink)  
Antiguo 26/01/2015, 09:05
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 14 años
Puntos: 24
Respuesta: Obtener valor max de jTxt en java y PostgreSQL

Cita:
Iniciado por roeboy2 Ver Mensaje
Pero al navegar por mi tabla persona con boton siguiente y atras me posiciono en un registro "x", y en los 3 campos visualizo los valores... hasta ahi perfecto,
Okey, perfecto.

Cita:
Iniciado por roeboy2 Ver Mensaje
cuando trato de agregar un nuevo registro con un boton nuevo los 3 campos hago que esten vacios con un "" y el campo codigo pongo en disable para que la bd de datos ponga un valor por mi y completo 2 campos restantes.
Todo bien hasta el momento.
Cita:
Iniciado por roeboy2 Ver Mensaje
Ahí es que me aparece el error ya que se agregó como codigo "" y esas comillas la bd entiende como string y para que esto no ocurra quiero obtener el valor mayor de mi codigo y sumarle 1 numero para agregar.
¿Y por qué, pequeño saltamontes, estás considerando el valor de txt_codigo.getText()? ¡No lo necesitas! ¡Ignóralo, pues la base de datos te asignará el valor del id (código)!
Envíale a la base de datos sólo los valores de nombre y teléfono, el código te lo asignará incrementalmente el motor de base de datos como ya sabes:
Cita:
Iniciado por roeboy2 Ver Mensaje
y efectivamente haciendo como dices: solo guardar los 2 campos funciona perfecto ya que mi bd esta configurado para autoincrementar.
¿Entonces? ¿Si funciona con esos dos valores, para qué consideras el valor de txt_codigo.getText()? ¡Si estás viendo que la BD va a poner el código por ti, y que funciona, entonces ya no intentes obtener el código por tu cuenta!
Mira el siguiente código, pero míralo atentamente:
Código Java:
Ver original
  1. try{
  2.     Conexion conexion = new Conexion();
  3.     PreparedStatement instruccion=conexion.conexion.prepareStatement("INSERT INTO \"public\".\"Persona\" (columna_nombre, columna_telefono) VALUES (?,?)");
  4.     instruccion.setString(1, txt_nombre.getText());
  5.     instruccion.setString(2, txt_telefono.getText());
  6.     instruccion.executeUpdate();
  7.     JOptionPane.showMessageDialog(null, "Registro Guardado");
  8.     bloquear();
  9. } catch(Exception e) {
  10.     JOptionPane.showMessageDialog(null, "Problema al guardar"+e);
  11. }
¿En qué momento usé txt_codigo.getText()? En ningún momento. ¿Por qué? Nuevamente: PORQUE NO LO NECESITO. Al no usarlo, no obtengo el error. Muerto el perro se acaba la rabia. Fin del problema.

Etiquetas: bd, max, postgresql, txt
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 23:19.