这只是我个人的一点小体会,对于现在的你也许会是很浅显,请你不要笑话``毕竟我也有和曾经的你一样的成长过程`
以前一个简单的朋友信息管理系统没有做完,这两天复习轻松了点没事就又接着做了点,因为一个人真正的朋友毕竟不是很多,绝对不可能多到暴数据库,所以在这系统中我是一次性取出所有记录的朋友信息。
数据库里有个记录朋友信息的表customer,于是在程序里我用一个对应的类Customer,其中数据域是一一对应的,有对应的getter和setter方法,但最后会多加一个标识数据域hava,用来表示此条信息是否被删除。在这程序中为了保证实现数据的同步在进行记录修改和删除时我同时处理数据库里的数据和对应的取出来的类Customer数组数据,查询操作是对对应的类Customer数组进行遍历。
部分变量:
- private Customer cus[]=new Customer[10000]; //用于保存数据库对应数据
- private int count; ///用于记录记录总条数,包括后来被删除的信息条数
- private int realcount; //用于记录记录总条数,不包括后来被删除的信息条数
- private int currentid; //用于记录当前界面上显示的信息在数组cus[]里的序号
cus[0] 没有保存数据,数据库记录从cus[1]开始,但cus[0]的数据我全设置为"",这样当我希望界面数据区显示空时(比如数据库为空时)直接把cus[0]的值直接传过去,与其实做同样的处理
执行查询时的上一条和下一条只是分别把 currentid 减 1 和加 1,最上一条和最下一条只是把 currentid设置为1和count, 当然这里没有考虑数组cus[]的相应数据被删除的情况,后面会解决。 就这样把查询和修改写完都没什么问题,但当开始写删除操作时问题就出现了,删除数据库里的当然没问题,关键是对于 cus[]对应的数据怎么处理,开始我考虑每次删除时把被删除的数据后面的数据全部向前移动一个,同时让count 减 1 ,但又考虑这样做后删除操作多时移动量好象也不少,特别是对于删除数据比较靠前的。于是我就考虑当删除时我并不真正删除 cus[] 里的此条数据,而是用一个标识域 have 来进行判断, 当cus[i].have=true 时表示第 i 条数据存在,可以显示,否则则跳过。所以在类Customer 里加了 private boolean have; 这样当我第一次从数据库里取时我全部设置为 true ,而当删除一条记录时就使该记录的 have=false,并且让 realcount 减 1,但count 值不变, currentid 加 1 ,显示后面一条数据。
这样做后对应的查询和修改代码就得改了,因为操作时首先也得判断一条记录的 have ==true,下面是执行下一条记录和最后一条记录时的操作函数和相关函数,其实类似或更为简单,
- private void youActionPerformed(java.awt.event.ActionEvent evt)
- {
- int i=currentid,j=currentid;
- while(currentid!=count&&i!=count) ///跳过被删除的记录
- {
- i++;
- if(cus[i].getHave())
- {
- currentid=i;
- this.setShowCustomer2(currentid);
- break;
- }
- }
- if(currentid==j) ///说明没在后面找到一条记录,已经是最后一条记录
- {
- JOptionPane.showMessageDialog(this,"已经到最后一条记录","",JOptionPane.WARNING_MESSAGE);
- }
- }
- private void zuiYouActionPerformed(java.awt.event.ActionEvent evt)
- {
- int i=count,j=currentid;
- while(currentid!=count&&i!=currentid)
- {
- if(cus[i].getHave())
- {
- currentid=i;
- this.setShowCustomer2(currentid);
- break;
- }
- i--;
- }
- if(currentid==j)
- JOptionPane.showMessageDialog(this,"已经是最后一条记录","",JOptionPane.WARNING_MESSAGE);
- }
- private void setShowCustomer(String xingMing1,String leiBie1,String shengRi1,String youXiang1,
- String diZi1,String chengShi1,String shengFen1,String bianMa1,
- String guoJia1,String jiaTingDianHua1,String gongSiDianHua1,
- String shouJi1,String beiZhu1,String ziLiao1)
- { //设置界面的参数
- xingMing.setText(xingMing1);
- leiBie.setText(leiBie1);
- shengRi.setText(shengRi1);
- youXiang.setText(youXiang1);
- diZi.setText(diZi1);
- chengShi.setText(chengShi1);
- shengFen.setText(shengFen1);
- bianMa.setText(bianMa1);
- guoJia.setText(guoJia1);
- jiaTingDianHua.setText(jiaTingDianHua1);
- gongSiDianHua.setText(gongSiDianHua1);
- shouJiHaoMa.setText(shouJi1);
- beiZhu.setText(beiZhu1);
- ziLiao.setText(ziLiao1);
- }
- private void setShowCustomer2(int i) /// i 表示当前要显示的记录序号
- {
- this.setShowCustomer(cus[i].getXingMing(),cus[i].getLeiBie(),cus[i].getShengRi(),
- cus[i].getYouXiang(),cus[i].getJiaTingDiZhi(),
- cus[i].getChengShi(),cus[i].getShengFen(),
- cus[i].getBianMa(),cus[i].getGuoJia(),
- cus[i].getJiaTingDianHua(),cus[i].getGongSiDianHua(),
- cus[i].getShouJi(),cus[i].getBeiZhu(),
- cus[i].getZiLiao());
- }