Java - Problema con ComboBox Java al modificar registros en MySQL

 
Vista:
sin imagen de perfil

Problema con ComboBox Java al modificar registros en MySQL

Publicado por Fabi (1 intervención) el 10/11/2021 05:59:47
Hola! Espero estén muy bien y puedan ayudarme a aclarar mi siguiente duda. Les comento, estoy trabajando con Java - Netbeans - MySQL en un sistema CRUD de escritorio.

Tengo una base de datos en MySQL con una tabla llamada CURSOS que contiene IdCurso,CodCurso,NombreCurso,CodigoArea y Precio y una tabla llamada AREACURSO con CodigoArea y Nombre Area. Evidentemente ambas se encuentran relacionadas por el campo Codigo Area.

Tengo un formulario que contiene un combobox el cual muestra los nombres de las areas de los cursos pero al insertar un registro se almacena el codigo de esa area en la tabla CURSOS. El método que usé para cargar el combo box fue el que sigue (importante indicar que en el jframe cambié el tipo de parametro a Areas_Cursos,que es la clase donde tengo métodos get y set de la tabla Area cursos:

[
b]public void LlenaComboArea(JComboBox<Areas_Cursos>cbAreaCurso) {

Connection con = conectar.ObtenerConexion();

try {

ps = (PreparedStatement)con.prepareStatement("Select cod_area,nombre_area from area_curso");
rs = ps.executeQuery();
while (rs.next()) {

cbAreaCurso.addItem(new Areas_Cursos(
rs.getInt("cod_area"),
rs.getString("nombre_area")));

}//cierre de while.
rs.close();

} catch (Exception e) {
System.err.print("Error al cargar datos al combobox de areas de curso:" + e);
}//fin catch

}[/b]


y el código del botón insertar es el siguiente, el cual me funciona bien:
private void btnInsertarCursosActionPerformed(java.awt.event.ActionEvent evt) {
Connection con = null;
int area;

con = ObtenerConexion(); //Se abre la conexion con el método creado.

try {
ps = (PreparedStatement) con.prepareStatement("INSERT INTO curso(Id_Curso,Cod_Curso,"
+ "Nombre_Curso,Cod_Area,Precio_Curso)VALUES(?,?,?,?,?)");

ps.setInt(1, Integer.valueOf(txtIdCurso.getText()));
ps.setString(2, txtCodCurso.getText());
ps.setString(3, txtNombreCurso.getText());

area = cbAreaCurso.getItemAt(cbAreaCurso.getSelectedIndex()).getId();
ps.setInt(4, (area));

ps.setDouble(5, Double.valueOf(txtPrecioCurso.getText()));

int res = ps.executeUpdate();

if (res > 0) {

JOptionPane.showMessageDialog(null, "Los datos fueron ingresados correctamente");
//LimpiarFormulario();
} else {
JOptionPane.showMessageDialog(null, "Los datos no fueron ingresados");
//LimpiarFormulario();
}
con.close();
} catch (Exception e) {

System.err.println(e);

}

ahora bien, mi problema es con el botón MODIFICAR ya que para modificar un registro debo modificar el valor del combobox y si no es asi me muestra el mensaje de "Hubo un error al modificar curso java.lang.NullPointerException" entiendo que es porque no estoy seleccionando ningún valor en el combo pero he intentado de todo con getSelectionItem( ), setSelectionItem, estructura If. y no lo logro en todos los casos me sigue apareciendo un error, el último código que tengo es el siguiente.

private void btnModificarCursosActionPerformed(java.awt.event.ActionEvent evt) {
Connection con = null; //Definimos una variable para la conexión a la base de datos

con = ObtenerConexion(); //A la variable con le asignamos lo que retorna el método ObtenerConexion() de
// la clase ConexionBD
try { // abrimos el try para la transacción

ps = (PreparedStatement) con.prepareStatement("UPDATE curso SET Cod_Curso=?,"
+ "Nombre_Curso=?,Cod_Area=?,Precio_Curso=? WHERE Id_Curso=?"); //consulta SQL de actualización

/*Indicamos la posición de la consulta en la que se encuentra el dato a modificar
asi como el control desde el que se modifica el dato. Si el dato es tipo texto en la BD usamos
setString, si es de tipo numero entero setInt y convertimos, si es double setDouble y convertimos*/
ps.setString(1, txtCodCurso.getText());
ps.setString(2, txtNombreCurso.getText());


int ar = (cbAreaCurso.getItemAt(cbAreaCurso.getSelectedIndex()).getId());

ps.setInt(3, ar);

ps.setDouble(4, Double.valueOf(txtPrecioCurso.getText()));

ps.setInt(5, Integer.valueOf(txtIdCurso.getText()));
//Ejecutamos la consulta"
int res = ps.executeUpdate();
if (res > 0) {

JOptionPane.showMessageDialog(null, "Los datos fueron modificados en la base de datos");

} else {
JOptionPane.showMessageDialog(null, "Los datos no fueron modificados en la base de datos");

}
con.close();
}//fin try
catch (Exception e) { //abrimos catch para manejo de errores

System.out.println("Hubo un error al modificar curso " + e);
}//fin catch
}

Es importante recalcar que aunque guardo el Código del area lo que se debe mostrar es la descripción.

Desde ya agradezco su ayuda.
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