Search code examples
javaswingjframeauto-incrementjdialog

How I can use an auto increment in java for a register system?


I'm creating a register system for students using files, while I use the program the auto increment works fine, but when I ruin it again, the autoincremnt returns 1, also I am not allowed to use MySQL DataBase I initialize it in the principal form

public class FrmPrincipal extends javax.swing.JFrame {
  AdmonOrgSecuencial a = new AdmonOrgSecuencial("Datos.dat","Id.dat");
  public static int idProveedor=1;
  
    /**
     * Creates new form FrmPrincipal
     */
    public FrmPrincipal() {
        initComponents();
        Idp gen = new Idp(idProveedor);
        a.idEscribir(gen);
    }

This is the code I use to create and display the students

public class FrmAltas extends javax.swing.JDialog {
  AdmonOrgSecuencial a = new AdmonOrgSecuencial("Datos.dat", "Id.dat");
    
    /**
     * Creates new form FrmAltas
     */
    
    public FrmAltas(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
       Idp proid;
        int cve;
       int clave;
       int generador=FrmPrincipal.idProveedor;
               proid= a.busquedaId(generador);
               clave = proid.getIdp();
        txtClave.setText(String.valueOf(clave));
    }

  private void btnGrabarActionPerformed(java.awt.event.ActionEvent evt) {                                          
      Idp proid;
      
      int clave;
      int generador= FrmPrincipal.idProveedor;
      proid=  a.busquedaId(generador);
    
        clave = proid.getIdp();
              

        String nombre = txtNombre.getText();
        float promedio = Float.parseFloat(txtPromedio.getText());
        Alumno alu = new Alumno(clave, nombre, promedio);
        a.altas(alu);
         
         a.bajasId(generador);
         FrmPrincipal.idProveedor=generador+1;
         int mas=FrmPrincipal.idProveedor;
         Idp proid2= new Idp(mas);
         
        a.idEscribir(proid2);

        
        this.dispose();
    }  

These are the methods I use

 public void idEscribir(Idp cve){
        try{
           {
            fos = new FileOutputStream(idArchivo, true);
            dos = new DataOutputStream(fos);
            dos.writeInt(cve.getIdp());
            cont++;
            }
        }
        catch(FileNotFoundException e){
            
        }
        catch(IOException e){
            System.out.println("Error:" +e.getMessage());
        }finally{
            cerrarArchivoEscritura();
        }
        
       }
         
public void bajasId(int elmr){
        copiarIncremental(elmr);
        borrarRenombrarId();
    }
    public void copiarIncremental(int idc){
       int idg;
       try{
           fis = new FileInputStream(idArchivo);
           dis = new DataInputStream(fis);
           fos = new FileOutputStream("Temporario.dat");
           dos = new DataOutputStream(fos);
           while(true){
               idg = dis.readInt();
               
               if(idg != idc){
                   dos.writeInt(idg);
                   
               }
           }
       }catch(EOFException e){
           
       }catch(IOException e){
           System.out.println("Error"+ e.getMessage());
       }finally{
           cerrarArchivoLectura();
           cerrarArchivoEscritura();
       }
   }
    
  public void borrarRenombrarId(){
      File original = new File(idArchivo);
      original.delete();
      File temporal = new File("Temporario.dat");
      temporal.renameTo(original);
  }
public Idp busquedaId(int clave){
         boolean existe= false;
        int cve;
        
           try{
               fis= new FileInputStream(idArchivo);
               dis= new DataInputStream(fis);
               while(existe == false){
                   cve = dis.readInt();
                   
                if(clave == cve){           
                    existe = true;
                    return new Idp(clave);
                   }
              
               }
                return null;
           }catch(FileNotFoundException e){
               return null;
           }
           catch(EOFException e){
               return null;
           }catch(IOException e){
               System.out.println("Error"+ e.getMessage());
               return null;
           }finally{
           cerrarArchivoLectura();
       }  
    
    }

Solution

  • Programs store their data in main memory. On program exit, all this data is lost. Therefore, when you restart your program, all the fields (like your auto-increment number) will no longer hold their former values.

    To fix this, you need to write the auto-increment number to disk, e.g. by storing it in a file. Then, on program start, you want to load the previously saved number back into main memory.