易截截图软件、单文件、免安装、纯绿色、仅160KB

JSP实现简易的SQL报表

输入: select ID as 编号, NAME as 姓名, AGE as 年龄 from XXX
输出:
编号
姓名
年龄
 
 
 
要求是如果SQL变动, 仍然要显示出来所有的别名字段信息和数据.
因为现在Hibernate用的比较广泛, 所以优先考虑用Hibernate来实现, 结果发现如果是实体映射查询语句, 可以方便的用:List<String> Query.getReturnAliases() 获得别名, 然而我们知道查询时有时候语句是很复杂的, 不全是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 = 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计算返回一般都是对象

return list;
}
测试代码:
List<Object[]> list = dao.queryAllForReport("select id as 编号, name as 登录名, address as 地址, realName from User");
System.out.println(list.size());
for(Object[] row : list) {
for(Object v : row) {
System.out.print(v + "\t");

}

System.out.println();
}
最后不得不回到JDBC, 用 ResultSet和ResultSetMetaData实现了这个功能, 详细代码(自己进行修改即可实现)如下:
<%@ page language="java" import="java.util.*, java.sql.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>SQL报表&l


相关文档:

SQL的三种分页方法

表中主键必须为标识列,[ID] int IDENTITY (1,1)
1.分页方案一:(利用Not In和SELECT TOP分页)
语句形式: 
SELECT TOP 页记录数量 *
from 表名
WHERE (ID NOT IN
  (SELECT TOP (每页行数*(页数-1)) ID
  from 表名
  ORDER BY ID))
  ORDER BY ID
//自己还可以加上一些查询 ......

SQL常用分页的办法 转


表中主键必须为标识列,[ID] int IDENTITY (1,1)
1.分页方案一:(利用Not In和SELECT TOP分页)
语句形式: 
SELECT TOP 页记录数量 *
from 表名
WHERE (ID NOT IN
  (SELECT TOP (每页行数*(页数-1)) ID
  from 表名
  ORDER BY ID))
  ORDER BY ID
//自己还可以加上一些查 ......

My PL/SQL practice 8/2/10

SQLPlus  :http://www.orafaq.com/wiki/SQL*Plus_FAQ
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/sqloperations.htm
1. Transfer values from a sql scripts:
   CNT=`sqlplus -s username/password1@dbname @getUVQuery_NULLCNT`;
 
   Note : Remeber to use o ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号