要!不要报表工具?

要,要,切克闹,报表工具来一套!!!

要问什么是报表工具?那我们先得掰扯掰扯什么是报表。查一下某某百科……简单的说,报表就是用表格、图表等格式来动态显示数据。可以用公式表示为:“报表 = 多样的格式 + 动态的数据”。而报表工具呢?用废话说,就是帮助用户做报表的工具……不那么废的话,还是某某百科:报表工具就是帮助用户用来展现自己输入数据,更多时候是将数据库中的数据,以客户想要的方式即报表的形式展现出来。

报表的必要性,应该是不用讨论了,无论在政府监管、企业运营还是一般的组织管理模式中,上级的监督考核、下级的汇报请示、平级的协同交流,都需要定时或不定时地传递一些报表,然后以这些报表为基础进行分析统计。对应到信息化工程的软件开发项目中,报表功能也就是必不可少的了。而今天,我们要讨论的,是要不要报表工具的问题,也就是用报表工具还是写代码来实现报表,这才是个问题。

对于万能的程序员来说,没有什么问题是一百行代码解决不了的,如果有,那就再来一百行……只不过,面对翻脸比翻书还快的需求、对外观样式的吹毛求疵、越来越复杂的报表格式和内在数据关系、越来越多需要维护的报表数量,尤其还不得不去修改隔壁的隔壁的隔壁老王写的千百万行代码时, 估计千言万语都会化成一句:专业的事还是让专业的人去干吧。没错,报表工具就是专业的,而且可以专业到让业务人员实现做报表,甚至构建快速系统。

让我们先从一个简单例子开始,下面是一个罗列所有学生信息的报表:

要!不要报表工具?_第1张图片

 

很简单是不是?让我们这些程序员撸起袖子马上干,就从熟悉的 java 开始吧……

首先是通过数据源,连接数据库提取数据。

public static void main(String\[\] args) throws IOException, ParseException  {  _showTable_("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://127.0.0.1/demo", "sa", "", "student");  }  public  static  DefaultTableModel getTableModel(String driver, String url, String user, String pwd, String tableName)  {  String sql = String._format_("select * from %s", tableName); String\[\] colNames = null; Object\[\]\[\] tabValues = **null**;  try  {  Class._forName_(driver).newInstance();  Connection conn = DriverManager._getConnection_(url, user, pwd);  Statement stat = conn.createStatement();  ResultSet rs = stat.executeQuery(sql);  ResultSetMetaData rsmd = rs.getMetaData();    if  (rsmd != null && rsmd != null)  {  ……省略n行代码  }  valList.add(row);  } tabValues =   new  Object\[valList.size()\]\[\];  valList.toArray(tabValues);  }  }   catch  (Exception e)  {  throw  new RuntimeException(e.getMessage(), e);  }  return  new DefaultTableModel(tabValues, colNames);  }  ……省略n+1行代码 然后就是直接创建各种样式标签,以报表样式展现数据: //生成表样式: String styleName = name;  if( isSub ) {  int subPos = styleName.indexOf( "\_sub\_" );   if ( subPos > 0 ) styleName = styleName.substring( 0, subPos );  } HashSet srcs = new HashSet();  int rr = report.getRowCount();  int cc = report.getColCount();  for( int row = 1; row <= rr; row++ ) {  for( short col = 1; col <= cc; col++ )  {  ……省略一堆代码  } //生成标题区和上表头区 append( sb, "\\n" ); append( sb, "
\\n" ); generateHtml( "_$_top", topStartRow, topEndRow, contentStartCol, contentEndCol, sb ); append( sb, "
\\n" ); append( sb, "\\n" ); append( sb, "\\n" ); } append( sb, "\\n" ); if ( leftHeader != null ) { //生成左表头区 append( sb, "\\n" ); append( sb, "
\\n" ); generateHtml( "_$_left", contentStartRow, contentEndRow, leftHeader.getBeginCol(), leftHeader.getEndCol(), sb ); append( sb, "
\\n" ); append( sb, "\\n" ); } //生成报表主体数据区 append( sb, "\\n" ); append( sb, "
\\n" ); generateHtml( "", contentStartRow, contentEndRow, contentStartCol, contentEndCol, sb ); append( sb, "
\\n" ); append( sb, "\\n" ); append( sb, "\\n" ); append( sb, "\\n" ); append( sb, "
\\n" ); append( sb, "

你可能感兴趣的:(数据分析)