我如何在 java 中为寄存器系统使用自动递增?
How I can use an auto increment in java for a register system?
我正在为使用文件的学生创建一个注册系统,当我使用该程序时,自动递增工作正常,但是当我再次破坏它时,自动递增 returns 1,我也不允许使用 MySQL 数据库
我以主要形式初始化它
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);
}
这是我用来创建和显示学生的代码
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();
}
这些是我使用的方法
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();
}
}
程序将它们的数据存储在主内存中。在程序退出时,所有这些数据都将丢失。因此,当您重新启动程序时,所有字段(例如您的 auto-increment 数字)将不再保留它们以前的值。
要解决此问题,您需要将 auto-increment 号码写入磁盘,例如通过将其存储在文件中。然后,在程序启动时,您想将先前保存的号码加载回主内存。
我正在为使用文件的学生创建一个注册系统,当我使用该程序时,自动递增工作正常,但是当我再次破坏它时,自动递增 returns 1,我也不允许使用 MySQL 数据库 我以主要形式初始化它
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);
}
这是我用来创建和显示学生的代码
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();
}
这些是我使用的方法
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();
}
}
程序将它们的数据存储在主内存中。在程序退出时,所有这些数据都将丢失。因此,当您重新启动程序时,所有字段(例如您的 auto-increment 数字)将不再保留它们以前的值。
要解决此问题,您需要将 auto-increment 号码写入磁盘,例如通过将其存储在文件中。然后,在程序启动时,您想将先前保存的号码加载回主内存。