使用JSP實(shí)現(xiàn)簡(jiǎn)易的SQL報(bào)表
這個(gè)內(nèi)容也是根據(jù)企業(yè)學(xué)員的要求準(zhǔn)備的. 其實(shí)這個(gè)小項(xiàng)目是剛畢業(yè)時(shí)候做的, 很多時(shí)候我們希望執(zhí)行下面的SQL/HQL然后得到一個(gè)HTML表格輸出:
輸入: select ID as 編號(hào), NAME as 姓名, AGE as 年齡 from XXX
輸出:
| 編號(hào) | 姓名 | 年齡 |
要求是如果SQL變動(dòng), 仍然要顯示出來(lái)所有的別名字段信息和數(shù)據(jù).
因?yàn)楝F(xiàn)在Hibernate用的比較廣泛, 所以優(yōu)先考慮用Hibernate來(lái)實(shí)現(xiàn), 結(jié)果發(fā)現(xiàn)如果是實(shí)體映射查詢語(yǔ)句, 可以方便的用:List
DAO
/**
* 根據(jù)查詢語(yǔ)句返回結(jié)果, 并包含結(jié)果的列名
* @param hql
* @param args
* @return
*/
public List queryAllForReport( final String hql, final Object... args) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for(int i =0; i < args.length; i++) {
query.setParameter(i, args[i]);
}
List list = query.list();
list.add(0, query.getReturnAliases());
return list;
}
});
// Hibernate做count計(jì)算返回一般都是對(duì)象
return list;
}
|
測(cè)試代碼:
List |
***不得不回到JDBC, 用 ResultSet和ResultSetMetaData實(shí)現(xiàn)了這個(gè)功能, 詳細(xì)代碼(自己進(jìn)行修改即可實(shí)現(xiàn))如下:
用到了JSTL和EL, 總的來(lái)說(shuō)要改版還是很方便的. 但是運(yùn)行需要比較高的Tomcat版本, 如5.5以上, 并需要JSTL類庫(kù). 不過(guò), 類似的模版項(xiàng)目開源框架應(yīng)該是很多很多的, 例如眾多的Report框架.
【編輯推薦】





















