Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como no modificar campos en blanco

Estas en el tema de Como no modificar campos en blanco en el foro de Mysql en Foros del Web. Hola buenas! Tengo en mi web una opcion de modificacion de datos y para ello la funcion de modificacion de datos de usuario que conecta ...
  #1 (permalink)  
Antiguo 25/02/2012, 03:53
 
Fecha de Ingreso: febrero-2012
Mensajes: 15
Antigüedad: 12 años, 2 meses
Puntos: 0
Como no modificar campos en blanco

Hola buenas!
Tengo en mi web una opcion de modificacion de datos y para ello la funcion de modificacion de datos de usuario que conecta con la base de datos. Yo de SQL no se demasiado la verdad. Mi problema es que en la funcion que tengo, tengo que rellenar todos los campos para hacer la modificacion y yo lo que quiero hacer es que si hay algun campo que lo deja en blanco se conserven los datos que habia de ese campo.Osea solo modificar los campos que ha escrito, sin obligacion de escribir todos.
SAbeis como lo puedo hacer??os dejo aqui el codigo de la funcion que tengo:



public void modificarUsuario(UsuarioVO usuarioVo)
throws Exception {

Connection conn = null;
PreparedStatement pstmt = null;
ConexionBD conecta= new ConexionBD();

try {
if(conecta.crearConexion()){
conn = conecta.getConexion();
conn.setAutoCommit(false);

String sentencia = "UPDATE USUARIO SET EMAIL=?, PASSWORD=?, NOMBRE=?, APELLIDO1=? WHERE EMAIL=?";

pstmt = conn.prepareStatement(sentencia);


pstmt.setString(5, usuarioVo.getEmail());
pstmt.setString(1, usuarioVo.getEmail());
pstmt.setString(2, usuarioVo.getPassword());
pstmt.setString(3, usuarioVo.getNombre());
pstmt.setString(4, usuarioVo.getApellido1());

pstmt.execute();
conn.commit();
}
} catch (SQLException e) {
conn.rollback();
e.printStackTrace();
} finally {
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
}
}


Muchas gracias de antemano!!
  #2 (permalink)  
Antiguo 25/02/2012, 06:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como no modificar campos en blanco

Mira, la cosa la puedes manejar de dos formas: Por programación, o por consulta en SQL.
Por programación lo que tienes que hacer es construir la lógica de ese método de modo tal que valide lo que está recibiendo en esos datos, y si recibe datos y no vacíos, ir agregando uno a uno los parámetros a cargar en la sentencia.
Esto significa que:
- Armas esta parte: "UPDATE USUARIO SET "
- Si recibes el nombre, debes agregar "NOMBRE=?"
- Si recibes el apellido, debes agregar "APELLIDO1=? "
- Finalmente le agregas "WHERE EMAIL=?";

En tu ejemplo el e-Mail, Username y Password deberían ser obligatorios, así que no los incluyo; a su vez, el cambio de e-Mail debería ser hecho en un proceso especial, por cuanto lo estás usando de identificador, con lo que se puede suponer que es PK, y las PK no se cambian de una forma tan liviana.

La otra posibilidad es hacerlo en la consulta SQL. Para eso lo que haces es una sentencia algo más compleja:

Código MySQL:
Ver original
  1. UPDATE USUARIO SET
  2.     EMAIL=IF(?<>'', ?, EMAIL),
  3.     PASSWORD=IF(?<>'', ?, PASSWORD),
  4.     NOMBRE=IF(?<>'', ?, NOMBRE),
  5.     APELLIDO1=IF(?<>'', ?, APELLIDO1)
  6. WHERE EMAIL=?
El problema, como puedes apreciar, es que como los parámetros los incluyes sin nombre, deberás ingresar dos veces cada parámetro para que crear la consulta.

Pregunta: ¿Estás trabajando en .Net o no?

Nota final: las normas de este foro prohíben postear código de programación (notarás que no usé lenguaje de programación para responderte), para tratar el tema en ese lenguaje, postea la pregunta en el Foro del lenguaje que usas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: blanco, campos, modificar, sql
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 05:39.