搪玻璃反应釜厂家
免费服务热线

Free service

hotline

010-00000000
搪玻璃反应釜厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

使用JSP实现简易的SQL报表

发布时间:2021-01-16 16:33:49 阅读: 来源:搪玻璃反应釜厂家

这个内容也是根据企业学员的要求准备的。 其实这个小项目是刚毕业时候做的, 很多时候我们希望执行下面的SQL/HQL然后得到一个HTML表格输出:

1

输出:

编号姓名年龄

要求是如果SQL变动, 仍然要显示出来所有的别名字段信息和数据。

因为现在Hibernate用的比较广泛, 所以优先考虑用Hibernate来实现, 结果发现如果是实体映射查询语句, 可以方便的用:List tReturnAliases() 获得别名, 然而我们知道查询时有时候语句是很复杂的, 不全是HQL, 这时候用SQLQuery的时候, 惊讶的提示这个方法尚未实现(最新版的Hibernate 3.3 是否实现尚未测试), 用的版本是Hibernate 3.2, 对应的代码是:

DAO

/**

* 根据查询语句返回结果, 并包含结果的列名

* @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 = eateQuery(hql);

for(int i =0; i < ngth; i++) {

tParameter(i, args[i]);

}

List list = st();

d(0, tReturnAliases());

return list;

}

});

// Hibernate做count计算返回一般都是对象

return list;

}

测试代码:

List list = eryAllForReport(“select id as 编号,

name as 登录名, address as 地址, realName from User”);

intln(ze());

for(Object[] row : list) {

for(Object v : row) {

int(v + “t”);

}

intln();

}

最后不得不回到JDBC, 用 ResultSet和ResultSetMetaData实现了这个功能, 详细代码(自己进行修改即可实现)如下:

﹤%@ page language=“Java” import=“il.*, l.*” pageEncoding=“UTF-8”%﹥

﹤%@ taglib prefix=“c” uri=“” %﹥

﹤!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”﹥

﹤html﹥

﹤head﹥

﹤title﹥SQL报表﹤/title﹥

﹤meta http-equiv=“pragma” content=“no-cache”﹥

﹤meta http-equiv=“cache-control” content=“no-cache”﹥

﹤meta http-equiv=“expires” content=“0”﹥

﹤/head﹥

﹤body﹥

﹤form action=“”﹥

﹤textarea name=sql cols=80 rows=10﹥${l}﹤/textarea﹥﹤br﹥

﹤input type=submit value=查询﹥

﹤/form﹥

﹤c:if test=“${!empty l}”﹥

﹤%

//new acleDriver();

Connection conn = tConnection(“jdbc:oracle:thin:@192.168.1.41:1521:xe”, “hr”, “hr”);

Statement stmt = eateStatement();

ResultSet rs = ecuteQuery(tParameter(“sql”));

if(rs == null) {

ose();

ose();

return;

}

// 取列名

ResultSetMetaData meta = tMetaData();

int cols = tColumnCount();

ArrayList colNames = new ArrayList();

for(int i = 1; i ﹤= cols; i++) {

d(tColumnLabel(i));

}

tAttribute(“colNames”, colNames);

%﹥

﹤table border=“1” cellpadding=“0” style=“border-collapse: collapse; ” width=“100%” bordercolor=“#000000” align=center ﹥

﹤tr﹥

﹤c:forEach items=“${colNames}” var=“c”﹥

﹤td﹥${c}﹤/td﹥

﹤/c:forEach﹥

﹤/tr﹥

﹤%

while(xt()) {

ear();

for(int i = 1; i ﹤= cols; i++) {

Object value = tObject(i);

intln(tClass());

// TODO 更多格式化控制

if(value instanceof te) {

value = tTimestamp(i);// 取出精确日期

mpleDateFormat df = new mpleDateFormat(“yyyy年MM月dd日HH点mm分ss秒EEE”);

value = rmat(value);

}

if(value instanceof gDecimal) {

gDecimal v = (gDecimal)value;

value = ubleValue();

// 要求输出时候最少显示两位小数, 最多输出小数点后3个数

mberFormat format = tInstance();// 只对小数格式化

tMaximumFractionDigits(2);// 最多3位小数

tMinimumFractionDigits(1);// 最少2位小数

value = rmat(value);// ==﹥ String

}

d(value);

}

tAttribute(“colNames”, colNames);

%﹥

﹤tr﹥

﹤c:forEach items=“${colNames}” var=“c”﹥

﹤td﹥${c}﹤/td﹥

﹤/c:forEach﹥

﹤/tr﹥

﹤%

}

ose();

ose();

ose();

%﹥

﹤/table﹥

﹤/c:if﹥

﹤/body﹥

﹤/html﹥

用到了JSTL和EL, 总的来说要改版还是很方便的。 但是运行需要比较高的Tomcat版本, 如5.5以上, 并需要JSTL类库。 不过, 类似的模版项目开源框架应该是很多很多的, 例如众多的Report框架。

双彩网app下载

三国战天下安卓版

仙剑诛魔

彩票软件哪个好app