本列实现以下功能:检测数据修改过的地方,是否是新行
请大家指出不足的地方,或提出更合理方法
修改前***************
peopleid/壮态 name/壮态 行壮态
1 未修改 张三 未修改 未修改
2 未修改 李四 未修改 未修改
"张三”,”李四”调换后,新增”王五”结果如下:
修改后***************
peopleid/壮态 name/壮态 行壮态
1 未修改 李四 修改过 修改过
2 未修改 张三 修改过 修改过
3 修改过 王五 修改过 新行
package datastatus;
/*
* 数据壮态接口
*/
public interface IDataStatus{
public static final int NOTMODIFY=0; //未修改
public static final int MODIFY=1; //修改
public static final int INSERT=2; //新行
public static final int DELETE=3; //删除行
/*
* 设置列壮态
*/
public void setColStatus(int dataStatus);
/*
* 得到列壮态
*/
public int getColStatus();
/*
* 设置行壮态
*/
public void setRowStatus(int dataStatus);
/*
* 得到行壮态
*/
public int getRowStatus();
}
package datastatus;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public abstract class AbstractRow implements IDataStatus{
protected static List listCol=new ArrayList();//列名列表
private int nowCol=0;//当前列ID
private HashMap colStauts;//列的壮态
private int rowStatus=IDataStatus.INSERT;//行的壮态
private boolean isRetrieve=false;//是否从数据库得到数据
/*
* 得到列名的列表 在子类实现
*/
protected abstract List getColumns();
/*
* 当子对象改变属性时调用此方法
* colName 要改变属性名
*/
protected final void modifiedColumn(String colName){
if (!isRetrieve() && (rowStatus!=IDataStatus.INSERT && rowStatus!=IDataStatus.DELETE)){
moveToColumn(colName);
modifiedColumn(nowCol);
}
}
/*
* 当子对象改变属性时调用此方法
* codIdx 要改变属ID
*/
protected final void modifiedColumn(int colID){
moveToColunm(colID);
setColStatus(IDataStatus.MODIFY);
if (getRowStatus()==IDataStatus.NOTMODIFY){
setRowStatus(IDataStatus.MODIFY);
}
}
/*设置当前列的壮态
* status: IDataStatus.NOTMODIFY=0; 末修改
* IDataStatus.MODIFY=1;已修改
* (non-Javadoc)
* @see datastatus.IDataStatus#setColStatus(int)
*/
public void setColStatus(int status) {
if (colStauts==null){
colStauts=new HashMap();
}
colStauts.put(new Integer(nowCol),new Integer(status));
if (getRowStatus()==IDataStatus.NOTMODIFY)
setRowStatus(status);
}
/*
*得到当前列的列壮态
* (non-Javadoc)
* @see datastatus.IDataStatus#getColStatus()
*/
public int getColStatus() {
if(rowStatus==IDataStatus.INSERT)
return IDataStatus.MODIFY;
if (colStauts!=null){
Object pos = colStauts.get(new Integer(nowCol));
if (pos != null) {
return ((Integer) pos).intValue();
}
}
return IDataStatus.NOTMODIFY;
}
/*
* 设置当前行的壮态
* status : IDataStatus.INSERT=2;新行
* IDataStatus.DELETE=3;删除行
* (non-Javadoc)
* @see datastatus.IDataStatus#setRowStatus(int)
*/
public void setRowStatus(int status) {
this.rowStatus=status;
}
/*
* 得到当前行的壮态
* (non-Javadoc)
* @see datastatus.IDataStatus#getRowStatus()
*/
public int getRowStatus(){
return this.rowStatus;
}
/*
* 移动到colName列
* colName : 列名
*/
public void moveToColumn(String colName){
if (getColunmCount()>0){
int idx=listCol.indexOf(colName);
moveToColunm(idx);
}
}
/*
* 移动到colID列
* colID : 列ID
*/
public void moveToColunm(int colID){
this.nowCol=colID;
}
/*
* 开始从数据库拿数据
*/
public void startRetrieve(){
isRetrieve=true;
this.setRowStatus(IDataStatus.NOTMODIFY);
}
/*
* 结束从数据库拿数据
*/
public void endRetrieve(){
this.isRetrieve=false;
}
/*
* 是否正在从数据库拿数据
*/
public boolean isRetrieve(){
return this.isRetrieve;
}
/*
* 得到列数量
*/
public final int getColunmCount(){
if (listCol.isEmpty()){
listCol=getColumns();
}
return listCol.size();
}
}
package test;
import java.util.List;
import datastatus.AbstractRow;
public class People extends AbstractRow{
public static final String PEOPLEID="peopleid";//列名
public static final String NAME ="name";//列名
private int peopleID;
private String name;
public People(){
}
public People(int peopleID,String name){
this.peopleID=peopleID;
this.name=name;
}
public void setPeopleID(int peopleID){
this.peopleID=peopleID;
//改变people列
modifiedColumn(PEOPLEID);
}
public int getPeopleID(){
return this.peopleID;
}
public void setName(String name){
this.name=name;
//改变people列
modifiedColumn(NAME);
}
public String getName(){
return this.name;
}
/*实现AbstractRow#getColumns()
* (non-Javadoc)
* @see datastatus.AbstractRow#getColumns()
*/
protected List getColumns() {
listCol.add(PEOPLEID);
listCol.add(NAME);
return listCol;
}
}
package test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import datastatus.IDataStatus;
public class Tester {
List list=new ArrayList();
public static void main(String[] ars){
Tester tester=new Tester();
People p1=new People();
p1.startRetrieve();
p1.setPeopleID(1);
p1.setName("张三");
p1.endRetrieve();
People p2=new People(2,"李四");
p2.setRowStatus(IDataStatus.NOTMODIFY);
//中p1,p2为旧记录 p3为新记录
tester.list.add(p1);
tester.list.add(p2);
System.out.println("修改前***************");
tester.printStatus();
p1.setName("李四");//将张三改成李四
p2.setName("张三");//将李四改成张三
System.out.println("修改后***************");
People p3=new People(3,"王五");
tester.list.add(p3);
tester.printStatus();
}
private void printStatus(){
System.out.println("peopleid/壮态 name/壮态 行壮态");
for (Iterator it=list.iterator();it.hasNext();){
People people=(People)it.next();
String string="";
people.moveToColunm(0);
string=string+people.getPeopleID()+" "+statusTOchina(people.getColStatus())+" ";
people.moveToColunm(1);
string=string+people.getName()+" "+statusTOchina(people.getColStatus())+" ";
string=string+" "+statusTOchina(people.getRowStatus());
System.out.println(string);
}
} private String statusTOchina(int status){
if (status==IDataStatus.NOTMODIFY){
return "未修改";
}else if(status==IDataStatus.MODIFY){
return "修改过";
}else if(status==IDataStatus.INSERT){
return "新行";
}else if(status==IDataStatus.DELETE){
return "删除行";
}
return null;
}
}
描述:检测数据的壮态
附件:
datastatus.zip (9 K)