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
相关文档:
关于这个问题, 比较复杂的说. 不过我希望通过例子来解释会方便理解一些.
假设有一个非常危险的任务, 是九死一生. 需要你揣着炸药包从北平开车走高速路过保定去石家庄把鬼子的碉堡给炸了. 注意: 这个任务十分艰巨, 有可能半路炸药爆炸. 所以出发前你需要苦练10元一本的<<铁布衫>>, � ......
下载后导入项目到 MyEclipse , 然后修改数据库连接参数即可测试. 我这用的是 MySQL 数据库. 用 JSP 是因为 Hibernate 可以配合各种框架, 因此在代码里我已经尽量的把页面和后台的直接变量耦合分隔开了.
hibernate_page.zip 433KB
部分代码显示:
相关 SQL:
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`u ......
count语句支持*、列名、常量、变量,并且可以用distinct关键字修饰, 并且count(列名)不会累计null的记录。下面随便用一些例子示范一下count的规则:比如对如下表做统计,所有列这里都用sql_variant类型来表示。
if (object_id ('t_test' )> 0 )
drop table t_test
go
create table t_test (a ......
表中主键必须为标识列,[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 server 2000服务器的解决方案
----转自:飞狐小屋
由� ......