在一般的开发过程中,往往要遇到从数据库中取出数据组成值对象(通常叫做VO),然后放在列表集中,并传回调用端的情况。在还没有接触到clone的时候,程序往往要在while块中构造VO实例,但这样做并不推荐,甚至应该极力避免,因为会造成程序效率的低下。在使用clone技术以后,程序运行效率有所改善,以下是常用写法,希望对大家有所帮助。
支持clone的VO看起来像这样:
package com.XXX;
import java.util.*;
public class TempJob implements Cloneable { //声明其可被clone
private String Jbnr=null;
private String Jbdw=null;
public Object clone() {
try {
return super.clone(); //返回clone以后的对象
}
catch (CloneNotSupportedException e) {
System.out.println(e.toString());
}
public void setJbnr(String Jbnr){
this.Jbnr=Jbnr;
}
public String getJbnr(){
return Jbnr;
}
public void setJbdw(String Jbdw){
this.Jbdw=Jbdw;
}
public String getJbdw(){
return Jbdw;
}
}
对于调用VO的类,像这样:
package com.XXX;
import java.sql.*;
import java.util.*;
public class DoJob{
private Connection con;
private Statement stmt;
private ResultSet rs;
private ArrayList lis=new ArrayList();
public ArrayList query(String a){
String sql="";
sql="select a.*,b.name from temp_job a, user_basic b "
+"where a.userid = b.userid order by a.wcqk";
try{
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
TempJob job=new TempJob(); //只要一个实例
while (rs.next()){
job.setJbnr(rs.getString(1));
job.setJbdw(rs.getString(2));
lis.add(job.clone()); //返回被clone对象
}
}
catch(SQLException e){
System.out.println(e.toString());
}
finally {
this.rs=null;
this.stmt=null;
con.close();
}
return lis;
}
}