style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

update en java netbeans y mysql

disculpen la molestia soy recien dada de alta en el grupo tengo un problema con un update el cual es el siguiente:
tengo una clase con todos los atributos de mi tabla

public Representante(int idrepresentante , String nombre,String paterno,String materno,int telefono) {
        this.idrepresentante=idrepresentante;
        this.nombre=nombre;
        this.paterno=paterno;
        this.materno=materno;
        this.telefono=telefono;
    }
<code> // cada uno con sus respectivos set y get
enseguida tengo mi conexion, dentro de ella creo el metodo que hace el update:
<code>
public void updatePersona(int idRepresentante,String nombre,String paterno,String materno,int tel){
       System.out.println(abrirConexion());
        try {            
            PreparedStatement pstm = conn.prepareStatement("update representantes " +
            "set nombre_representante= ?  ,  " +
            "aPaterno_representante= ? , " +
            "aMaterno_representante= ? , " +                    
            "telefono_representante= ? " +                    
            "where id_representante= ? ");            
           
            pstm.setInt(5,idRepresentante);
            pstm.setString(1,nombre);                  
            pstm.setString(2,paterno);
            pstm.setString(3,materno);
            pstm.setInt(4,tel);
           
            pstm.executeUpdate();
                       
         }catch(SQLException e){
         System.out.println(e);
      }
        System.out.println(cerrarConexion());

   }
<code>//dicho metodo lo mando llamar del formulario de modificar en el cual lo hago de la siguiente manera

<code>
con.updatePersona(0, txtNombre.getText(), txtPaterno.getText(), txtMaterno.getText(), Integer.parseInt(txtTelefono.getText()));
 
<code>

pero nada!! no me actualiza los datos que estoy dandole
si alguien encuentra el horror o me pudiese decir q estoy haciendo mal se lo agradecere mucho

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Registro existente

Que tal, sólo por curiosidad ¿existe un registro en la tabla representantes cuyo id_representante sea igual a 0? Si no es así, esa es la razón por la cual no se actualiza la información, ya que no existe registro para actualizar.

update java netbeans mysql

Que tal, no de hecho ese cero segun entiendo se usa para indicar que es la posicion de la llave primaria para la tabla, o estoy mal?
ya no se q mas hacer le he intentado de todo pero no me marca errores pero tampoco lo actualiza

where

Estas mal, ese 0 es proporcionado como el valor del campo id_representante el cual forma parte de la cláusula where en la cuál se indican las "condiciones que debe cumplir el registro " a actualizar. En otras palabras, la instrucción que se esta ejecutando en tu programa hace lo siguiente: actualiza los campos nombre_representante, aPaterno_representante, aMaterno_representante y telefono_representante DEL registro de la tabla representantes DONDE el campo id_representante ES IGUAL a CERO. Debido a que en tu tabla no existe un registro con id_representante igual a 0, no hay nada que actualizar. En lugar de 0 proporciona el valor del campo id_representante de un registro existente.

tutorial sql

Aqui encontraras un sencillo tutorial sobre SQL para que entiendas mejor la explicación previa: http://www.w3schools.com/sql/

tutorial sql

Aqui encontraras un sencillo tutorial sobre SQL para que entiendas mejor la explicación previa: http://www.w3schools.com/sql/

update java netbeans mysql

//cambie los parametros del metodo donde tenia los datos de la tabla lo deje asi:

public void updatePersona(Representante representante) {
        System.out.println(abrirConexion());
        try {
            PreparedStatement pstm = conn.prepareStatement("update representantes "
                    + "set nombre_representante= ?  ,  "
                    + "aPaterno_representante= ? , "
                    + "aMaterno_representante= ? , "
                    + "telefono_representante= ? "
                    + "where id_representante= '" + representante.getIdrepresentante() + "' ");

            pstm.setInt(0, representante.getIdrepresentante());
            pstm.setString(1, representante.getNombre());
            pstm.setString(2, representante.getPaterno());
            pstm.setString(3, representante.getMaterno());
            pstm.setInt(4, representante.getTelefono());

            pstm.executeUpdate();

        } catch (SQLException e) {
            System.out.println(e);
        }
        System.out.println(cerrarConexion());

    }
<code>//es aqui dnde se hace el update pues no quiero las consultas dentro de mi formulario, ahora bien en el formulario lo mando llamar mediante el //boton donde se deben guardar los datos que se actualizaron de la siguiente manera:
<code>
Representante representante = new Representante
        (0,txtNombre.getText(), txtPaterno.getText(), txtMaterno.getText(),
                Integer.parseInt(txtTelefono.getText()));
        con.updatePersona(representante);
<code>
//entiendo el primer parametro cero, pero aunque lo cambie a 1 no me actualiza, ahora lo que me arroja cuando pulso el btn actualizar es:
abrir ok
cerrar ok
abrir ok
java.sql.SQLException: Parameter index out of range (0 < 1 ).
cerrar ok

//no entiendo a que se refiere :S

Imagen de chicowed

Where

En la clausula where id_representante= ? debes tener cuidado de que el dato que estas pasando sea un registro valido en la base de datos, es decir si le pasas por ejemplo un 1 este uno debe existir en la DB de no existir no modificara nada porque no existe "obvio".

Algo que te puedo aconsejar respecto a tu código seria lo siguiente:

Realmente es necesario que tu campo "telefono_representante= ? " sea de tipo int?
Solo en caso de que sea estrictamente necesario, ya sea porque necesitas validar ese campo o realizar alguna operación con el, seria aconsejable que sea de tipo int, pero sino es así no lo veo necesario puede ser un String.

con.updatePersona(0, txtNombre.getText(), txtPaterno.getText(), txtMaterno.getText(),
En esta linea te hace falta una "n" por lo que veo, la otra es que no veo que aquí pases el valor idRepresentante que es necesario en la función updatePersona ya que sin este dato no sabre que registro actualizar de tu DB.

Imagen de chicowed

Mal...

Checa el Orden que lleva el PreparedStetement es el mismo Orden que debes seguir, por sino me explico aqui abajo te dejo un choro.

El objeto PreparedStatement
El objeto de tipo PreparedStatement se utiliza para ejecutar sentencias SQL precompiladas (o dinámicas en cuanto a los valores de los parámetros en la condición de la sentencia SQL). Por lo general, PreparedStatement se utiliza para la ejecución de sentencias INSERT, DELETE y UPDATE ya que éstas últimas requieren condicionantes por lo que se crea el String con la sentencia SQL desde la obtención del objeto PreparedStatement. Para establecer el valor de una condicionante, se utilizan los diversos métodos setXXX() donde XXX representa a cada uno de los diversos tipos de datos que existen en Java (int, byte, float, double, String, etc) y posteriormente se invoca al método executeUpdate() el cual regresa un valor int que indica el número de registros afectados por la sentencia (ya sea INSERT, UPDATE o DELETE). Por ejemplo, utilizando el objeto PreparedStatement:

 
PreparedStatement pstmt =
   con.prepareStatement(“update emp
                         set nom_emp=?
                          where cve_emp=?));
pstmt.setString(1,“Carlos Roman”);
pstmt.setInt(2,123);
int res = pstmt.executeUpdate();

Se observa que JDBC sustituye los signos de interrogación (?) por los valores según el orden establecido por el primer argumento del método setXXX(). También existe la posibilidad de crear una sentencia SELECT con argumentos asignados dinámicamente así que PreparedStatement también tiene el método executeQuery() que regresa un objeto ResultSet, con los registros resultantes:

PreparedStatement pstmt =
   con.prepareStatement(“select cve_emp,nom_emp from emp
                          where cve_emp=?));
pstmt.setInt(1,123);
ResultSet res = pstmt.executeQuery();

Fuente: http://profesores.fi-b.unam.mx/carlos/java/JDBC.html

update java netbeans mysql

//entonces deberia cambiar algo en donde estoy invocando el metodo en el boton?

Representante representante = new Representante
        (0,txtNombre.getText(), txtPaterno.getText(), txtMaterno.getText(),
                Integer.parseInt(txtTelefono.getText()));
        con.updatePersona(representante);
<code>
//de hecho ayer cambie el cero q está ahi pero me modifica solo el primer dato de la tabla, asi sea seleccione el numero 10, me cambia unicamente el primero >S, o tendras alguna otra forma de hacerlo? porfavor help!
Imagen de chicowed

Dinamico

Cuando creas una instancia del objeto Representante debes de pasarle el valor del id_representante de manera dinámica, es decir que el valor cambie según un evento, como lo haces con los demás datos con un simple txtidPersona.getText() por ejemplo.

aqui te va un ejemplo sencillo espero te pueda servir

private void tablaContactosMouseClicked(java.awt.event.MouseEvent evt) {                                                

        int fila = tablaContactos.rowAtPoint(evt.getPoint());

        txtIdContacto.setText(tablaContactos.getValueAt(fila, 0).toString());
        txtIdNombre.setText(tablaContactos.getValueAt(fila, 1).toString());
        txtTelefono.setText(tablaContactos.getValueAt(fila, 2).toString());

    }

Y luego pasas esos datos al contructor de tu metodo Representante

Espero me hayas entendido, o más bien me halla explicado bien, es todo lo que puedo hacer por ti.

uhmmm

//En el constructor de la vista;

Representante r;

//En el Boton

r=new Representantes();

r.setidCodigo(txtCodigo.getText());
......
.....
...
if(con.updatepersona(r)){

//Se actualizo con exito
}

//y otra cosa que te recomendaria seria q en el metodo q actualiza no lo declares void , sino boolean

public boolean updatePersona(Representante representante) {
        System.out.println(abrirConexion());
boolean r=false;        
try {
            PreparedStatement pstm = conn.prepareStatement("update representantes "
                    + "set nombre_representante= ?  ,  "
                    + "aPaterno_representante= ? , "
                    + "aMaterno_representante= ? , "
                    + "telefono_representante= ? "
                    + "where id_representante= '" + representante.getIdrepresentante() + "' ");
            pstm.setInt(0, representante.getIdrepresentante());
            pstm.setString(1, representante.getNombre());
            pstm.setString(2, representante.getPaterno());
            pstm.setString(3, representante.getMaterno());
            pstm.setInt(4, representante.getTelefono());
            r=pstm.executeUpdate()==1;
        } catch (SQLException e) {
            System.out.println(e);
        }
        System.out.println(cerrarConexion());
    return r;
}

update java netbeans mysql

Hola Que tal!!
únicamente quisiera agradecer la atención de ambos de verdad me fue de gran ayuda, gracias a Dios ese problema se resolvió!
MUCHAS GRACIAS y por aquí seguiré dando lata hehe :)

Imagen de chicowed

y ¿Cuál fue tu solución?

Comparte con todos tu solución a alguien mas le puede servir :)
Saludos

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">