Java - Duda Guardar datos de un combo box a una base de datos

   
Vista:

Duda Guardar datos de un combo box a una base de datos

Publicado por Diego (2 intervenciones) el 17/07/2017 06:32:17
Hola, espero me puedan ayudar llevo dos días intentando dar con una solución pero no puedo, tengo una base de datos llamada catalogo, tiene dos tablas una llamada cliente y contiene: idcliente,rfc,numero,telefono,idciudad(llave foranea), y la otra es ciudad tiene los datos: idciudad,ciudad,
ambos id son de tipo entero, en netbeans cree una conexion donde en clientes agrege un combo box, en el cual me aparecen las ciudades, mi pregunta es como logro hacer que cuando un usuario se registre y en el combo box seleccione una ciudad, se me guarde el nombre de la ciudad y no el idciudad, espero darme a entender y me puedan ayudar :(
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
private void jbtnGuardarActionPerformed(java.awt.event.ActionEvent evt) {
 
//llamar a la clase conectar
Conectar objConectar=new Conectar();
//paso 2 crear la variable de conexion con el metodo conexion 
Connection objConexion=objConectar.conexion();
if(jtxtCliente.getText().trim().isEmpty()
||jtxtRfc.getText().trim().isEmpty()
||jtxtNombre.getText().trim().isEmpty()
||jtxtTelefono.getText().trim().isEmpty()
||jtxtCalle.getText().trim().isEmpty()
||jtxtNumero.getText().trim().isEmpty()
||jtxtColonia.getText().trim().isEmpty()
||jtxtCp.getText().trim().isEmpty()
||jcmbCiudad.getSelectedItem().equals("")){
JOptionPane.showMessageDialog(this,"Faltan campos por capturar","Datos invalidos",JOptionPane.INFORMATION_MESSAGE);
}else{
 
//paso 3 Variable temporal que almacenan lo que tienen nuestras cajas de texto
int id_cliente=Integer.parseInt(jtxtCliente.getText());
String rfc=jtxtRfc.getText();
String nombre=jtxtNombre.getText();
String telefono=jtxtTelefono.getText();
String calle=jtxtCalle.getText();
String numero=jtxtNumero.getText();
String colonia=jtxtColonia.getText();
int cp=Integer.parseInt(jtxtCp.getText());
int idciudad=jcmbCiudad.getSelectedIndex();
 
//paso 4 variable para nuestra sentencia SQL
String sql="INSERT INTO clientes(idclientes,rfc,nombre,telefono,calle,numero,colonia,cp,idciudad)VALUES(?,?,?,?,?,?,?,?,?)";
//paso 5 Preparar la sentencia a ejecutar mediante un try catch 
try{
PreparedStatement ps=objConexion.prepareStatement(sql);
ps.setInt(1,id_cliente);
ps.setString(2,rfc);
ps.setString(3,nombre);
ps.setString(4,telefono);
ps.setString(5,calle);
ps.setString(6,numero);
ps.setString(7,colonia);
ps.setInt(8,cp);
ps.setInt(9,idciudad);
 
//ejecutar la sentencia 
ps.executeUpdate();
}catch (Exception ex){
System.out.println("Error al insertar"+ex.getMessage());
}
JOptionPane.showMessageDialog(null,"Registro guardado","Registro de usuario",JOptionPane.OK_OPTION);
Limpiar();
}
este es mi codigo del boton guardar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Duda Guardar datos de un combo box a una base de datos

Publicado por Juan (108 intervenciones) el 17/07/2017 09:09:12
Buenas Diego

A ver si en la tabla que tienes pensado guardar tienes un id como clave foránea, lo lógico es guardar esa clave foránea y luego si necesitas la ciudad que hagas en tu consulta para seleccionar datos un JOIN con la tabla ciudad para que te aparezca ésta.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda Guardar datos de un combo box a una base de datos

Publicado por Diego (2 intervenciones) el 17/07/2017 18:48:37
Hola, me podrias dar un ejemplo ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose

Duda Guardar datos de un combo box a una base de datos

Publicado por Jose (46 intervenciones) el 18/07/2017 00:24:57
Hola Diego.

Lo que te dice juan es correcto, en tu tabla cliente debes guardar el id de ciudad no su nombre, las ciudades ya deberían estar guardadas con anterioridad, antes de continuar unas preguntas, este modelo lo hiciste tu?, cuales es tu conocimiento de sql?.

Me gustaría que respondiera, para profundizar mi respuesta.

Pero a espera de ello, tratare de responder de una manera sencilla.

primero jcmbCiudad.getSelectedIndex(), este metodo te retornara el indice del objeto, pero este corresponde a la posición del array interno que usa el combobox, y no tu id ciudad, por lo que imagino que tu código te dará, error, eso si le tienes como clave foránea el idciudad. si no, si te dejara insertar, pero si realizas el join, no te retornara las ciudades correctas, o no te retornara nada.

Así que lo correcto aquí, es que tengas una clase ciudad, que tendrá los mismos atributos que tu tabla.crees estos objetos ciudad con tu base de datos, y ya los insertes en tu combo box una ves hecho esto. Podrás hacer Ciudad selected=(Ciudad) jcmbCiudad.getSelectedItem();

si no sabes como hacer lo anterior, aquí te dejo unos links:

http://chuwiki.chuidiang.org/index.php?title=JComboBox_Con_Objetos_y_Base_de_Datos_MySQL
http://www.apuntesdejava.com/2011/02/jcombobox-de-objetos.html

Segundo. Una ves que se inserte los datos correctamente, ya podes obtenerlos de base de datos con una consulta utilizando join.

Ejemplo de join utilizando la información que nos diste de tus tablas:

select clientes.idclientes,clientes.rfc,clientes.nombre,clientes.telefono,clientes.calle,clientes.numero,clientes.colonia,clientes.cp,clientes.idciudad,
ciudad.ciudad
from clientes inner join ciudad on cliente.idciudad=ciudad.idciudad.

Imagino, que ya sabes obtener los datos de consulta en java.

este link que te dejo, es simple los datos te los retorna en consola, ahora si lo quieres mostrar en jtable, te lo dejo de tarea.
http://www.chuidiang.org/java/mysql/EjemploJava.php


Algunos conceptos que deberías investigar, para que se te haga la vida más facil:

conceptos básicos de base de datos relacional (que es una tabla, que es una llave foranea, que es una llave primaria, constraint y check)
lenguaje sql dml(manipulacion de datos (select, insert,delete,etc) y ddl (creacion de objetos en base de datos. create table, create database, alter table,etc.)

te dejo aqui otro link para empezar
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Como-realizar-consultas-simples-con-SELECT.aspx

Tambien seria bueno que revisaras los manuales de sql y java en este foro, seguro que te ayudan.

Antes de irme:
Si no te quieres complicar tanto, porque debes de tener una tabla ciudad, y la foranea a la tabla cliente, porque sencillamente, vuelves esto un campo string.

Imagino que tu combobox lo llenas manualmente con las ciudades y no las traes de base de datos.

Así que simplemente cambias esto
1
int idciudad=jcmbCiudad.getSelectedIndex();
Por esto
1
String nombreCiudad=(String)jcmbCiudad.getSelectedItem();,
Que si, la otra forma es más elegante, que es más fácil darle mantenimiento,pero lo dejo, por si es una urgencia y quieres salir de este problema luego.

Y repito en la sugerencia anterior, en tu tabla cliente ya tienes todos los datos, así que nada de hacer inner join. y tu tabla ciudad ya no serviría.

saludos.

perdón por la redacción y ortografía, a veces por las prisas, uno comete este tipo de error.

dicho esto, espero que te ayude, y esperamos obtener noticias tuyas de como te fue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar