Valor variable JAVA

C4mav1

Sinceramente es una cosa super sencilla creo, pero es que no caigo.

Aqui os dejo la main.

        Persona pers = new Persona();

    int opcion;
    int comp_i;
    String comp_s;
    String op;

    Class.forName("com.mysql.jdbc.Driver");
    Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/carlos", "root", "");

    Statement consultaP = conexion.createStatement();
    ResultSet resultP = consultaP.executeQuery("SELECT * FROM Persona;");

    do{

        System.out.println("1. Alta de Cliente");
        System.out.println("2. Borrar Cliente");
        System.out.println("3. Alta Nómina");
        System.out.println("4. Borrar Nómina");
        System.out.println("5. Consultar");
        System.out.println("6. Salir");

        op =JOptionPane.showInputDialog("Elige una Opción 1-6");
        opcion= Integer.parseInt(op);

        switch ( opcion ){

            case 1:
                //Alta cliente
                System.out.println(".:. Insertar persona .:.");

                comp_s=JOptionPane.showInputDialog("Introduce DNI");
                comp_i=Integer.parseInt(comp_s);
                              
                while(resultP.next()){
                    
                    if(comp_i == resultP.getInt("dni")){

                        System.out.println("El dni ya existe");
                    }

                    else{
                        pers.Introduce_Persona();
                        Statement insertarP = conexion.createStatement();
                        int ResultInsertarP = insertarP.executeUpdate("Insert into Persona values('"+pers.Devolver_nombre()+"','martinez',48468077,22);");
                        System.out.println("Ha sido insertada correctamente");
                    }
                }
                break;

En el ultimo else es donde tengo el problema, me creo la persona (pers.Introduce_Persona())
Pero cuando quiero recoger su nombre, tiene como valor null (pers.Devolver_nombre())
En vez de darme el nombre que le dado.

Aqui esta la otra clase Persona.

public class Persona {

private String nombre;
private String apellido;
private int Dni;
private int edad;

private Persona per;
private String p;
private int s;


public void Introduce_Dni(int d){
    Dni = d;
}
public int Devolver_Dni(){
    return Dni;
}

public void Introduce_nombre(String pe) {
   nombre=pe;
}

public String Devolver_nombre() {
    return nombre;
}

public void Introduce_apellidos(String a) {
    apellido=a;
}

public String Devolver_apellidos(){
    return apellido;
}

public void Introduce_edad(int e) {
    edad=e;
}

public int Devolver_edad(){
    return edad;
}

public Persona Introduce_Persona () {
    
     per=new Persona();
     p=JOptionPane.showInputDialog("Dame el nombre");
     per.Introduce_nombre(p);

     p=JOptionPane.showInputDialog("Dame el apellido");
     per.Introduce_apellidos(p);

     p=JOptionPane.showInputDialog("Dame el DNI");
     s=Integer.parseInt(p);
     per.Introduce_Dni(s);

     p=JOptionPane.showInputDialog("Dame la edad");
     s=Integer.parseInt(p);
     per.Introduce_edad(s);
     return per;
}

Salu2. Thx

Fyn4r

Es cosa mía o no hay método constructor en la clase Persona?

D10X

1) No inventes!!! Usa get y set ... que es eso de "Introduce/Devuelve".

2) En el metodo introduce_persona estas generando un objeto persona nuevo, y lo estas devolviento (return per) pero no lo estas guardando en ningun sitio.

Para que eso funcione puedes hacer en la clase principal:

pers = pers.Introduce_Persona();

o

modificar en la clase persona y en vez crear un nuevo objeto "per", guardarlos en las variables del propio objeto:

public Persona Introduce_Persona () {
        
p=JOptionPane.showInputDialog("Dame el nombre"); this.Introduce_nombre(p); p=JOptionPane.showInputDialog("Dame el apellido"); this.Introduce_apellidos(p); p=JOptionPane.showInputDialog("Dame el DNI"); s=Integer.parseInt(p); this.Introduce_Dni(s); p=JOptionPane.showInputDialog("Dame la edad"); s=Integer.parseInt(p); this.Introduce_edad(s); }

3) Eso es un poco guarrada ... el constructor no es necesario, pero para hacer eso create un constructor de Persona que pida todo y trabajas con ese objeto, el DNI lo estas pidiendo dos veces ... :S.

public Persona() {
        
p=JOptionPane.showInputDialog("Dame el nombre"); this.Introduce_nombre(p); p=JOptionPane.showInputDialog("Dame el apellido"); this.Introduce_apellidos(p); p=JOptionPane.showInputDialog("Dame el DNI"); s=Integer.parseInt(p); this.Introduce_Dni(s); p=JOptionPane.showInputDialog("Dame la edad"); s=Integer.parseInt(p); this.Introduce_edad(s); }

Y por dios, consulta contra la BBDD con el DNI, no hagas un bucle para recorrer el resulset y comprobar si el DNI ya existe ... ¬¬.

¿Para que es eso? ¿Trabajo?¿Estudios?¿Universidad/Modulo?

1 respuesta
Atrus

#1 como ya te han dicho, usar los set y get en java es esencial, aparte que la mayoria de los IDE te los generan solos, te permiten controla lo que pasa por esas variables antes siquiera de que sean asigandas, por ejemplo, podrias verificar si el dato entrado esta en un formato correcto antes de que al asignarlo te salte una excepcion no controlada.

Ademas, estaria bien que tuvieses un constructor de la clase de datos con los que tratas al que le pudieses pasar por parametro los datos que vayas a usar, asi te sera todo mas legible y eliminaras codigo iniecesario. En este constructor meterias un set por cada parametro pasado.

Tambien, deberias aprender a no almacenar información que no vas a usar de forma inmediata. Guardar un SELECT * es una burrada, consigue los datos del usuario y realiza la query. Ahora no lo ves, pero cuando tengas que manejarte con decenas de miles de datos, no puedes barajartelos todos y revisarlos con un bucle. Es mas conveniente embuclar varias consultas simples que hacer una query gorda y embuclar las busquedas. Las BBDD actuales estan mas que preparadas para atender todas las peticiones por segundo que hagan falta (siempre que la maquina en la que esta lo permita).

Animo, lo bueno que tiene Java es que te va a dar de comer seguro. Lima unas cosillas y no tendras problemas.

NeB1

Despues de esto, cuando toques C# y sus 'Properties' te sabrá a gloria xD

C4mav1

Thx por vuestra ayuda, esta tarde probaré haber si asi arreglo el problema.

#3 Es para un módulo xD

Usuarios habituales

  • C4mav1
  • NeB1
  • Atrus
  • D10X
  • Fyn4r