一般來說我們在利用JDBC Library與資料庫溝通時,如果僅僅使用原生的函式來呈現ResultSet
的資料,在使用上還蠻不方便的,假設資料表的欄位過多的話! 因此在這邊將使用Commons
BeanUtils Library來將ResultSet做包裝,再利用property的copy屬性值函式來將資料庫取得的
資料複製到相對應的JavaBeans實體屬性下,如此一來可以減少做setter的工作。
首先您需要具備相關的函式庫,如下:
commons-beanutils-1.9.2.jar
commons-collections-3.1.jar
org-apache-commons-logging.jar
sqljdbc4.jar
緊接著,請定義相對應各資料表的JavaBeans。請記得您在資料表下要取出的欄位資料,其
名稱要相對應至JavaBeans的成員變數。
再來就是撰寫主要的程式
這支method所傳入的參數為查詢的SQL語法及JavaBeans的類別物件(Employees.class),
PS. Employees.class 如同object.getClass() => Returns the runtime class of this Object.
要取得實體時,會使用類別物件呼叫newInstance()可以動態的產生對應類別的實體
在此將使用RowSetDynaClass類別將rs做包裝後,此時您可以得到所有的資料表的欄位名稱
或者是getRows()所回傳回來的DynaBean型態的List資料。
在這個時候您不用再辛辛苦苦的利用Employees所宣告的物件一個一個屬性做setter值的動作
,您只需要利用PropertyUtils.copyProperties將來源rows.get(i) copy至bean內即可以將各欄位
的資料複製至JavaBeans有定義的成員變數內,最後再做印出的動作做確認!!
的資料,在使用上還蠻不方便的,假設資料表的欄位過多的話! 因此在這邊將使用Commons
BeanUtils Library來將ResultSet做包裝,再利用property的copy屬性值函式來將資料庫取得的
資料複製到相對應的JavaBeans實體屬性下,如此一來可以減少做setter的工作。
首先您需要具備相關的函式庫,如下:
commons-beanutils-1.9.2.jar
commons-collections-3.1.jar
org-apache-commons-logging.jar
sqljdbc4.jar
緊接著,請定義相對應各資料表的JavaBeans。請記得您在資料表下要取出的欄位資料,其
名稱要相對應至JavaBeans的成員變數。
public class Employees {
private int Employeeid;
private String Employeename;
private String Department;
private BigDecimal Salary;
public int getEmployeeid() {
return Employeeid;
}
....略過
}
public class IncomeRecord {
private String year;
private String month;
private String id;
private String source;
private BigDecimal income;
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
....略過
再來就是撰寫主要的程式
public void showBeanList(String query, Class<?> clazz)throws Exception{
PreparedStatement getRowsList = m_conn.prepareStatement(query);
ResultSet rs = getRowsList.executeQuery();
RowSetDynaClass rsdc = new RowSetDynaClass(rs);
List<DynaBean> rows = rsdc.getRows();
List<String> propertyList = new ArrayList<String>();
for(DynaProperty d : rsdc.getDynaProperties()){
System.out.println("*********property name:"+d.getName());
propertyList.add(d.getName());
}
for(int i = 0 ; i < rows.size() ; i++){
Object bean = clazz.newInstance();
PropertyUtils.copyProperties(bean, rows.get(i));
System.out.println(bean);
}
System.out.println("============================");
}
這支method所傳入的參數為查詢的SQL語法及JavaBeans的類別物件(Employees.class),
PS. Employees.class 如同object.getClass() => Returns the runtime class of this Object.
要取得實體時,會使用類別物件呼叫newInstance()可以動態的產生對應類別的實體
在此將使用RowSetDynaClass類別將rs做包裝後,此時您可以得到所有的資料表的欄位名稱
或者是getRows()所回傳回來的DynaBean型態的List資料。
在這個時候您不用再辛辛苦苦的利用Employees所宣告的物件一個一個屬性做setter值的動作
,您只需要利用PropertyUtils.copyProperties將來源rows.get(i) copy至bean內即可以將各欄位
的資料複製至JavaBeans有定義的成員變數內,最後再做印出的動作做確認!!
留言
張貼留言