要,要,切克鬧,報表工具來一套?。?!
成都創(chuàng)新互聯(lián)公司專注于成都企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,商城開發(fā)。成都網(wǎng)站建設(shè)公司,為成都等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
要問什么是報表工具?那我們先得掰扯掰扯什么是報表。查一下某某百科……簡單的說,報表就是用 表格 、圖表等格式來動態(tài)顯示數(shù)據(jù)??梢杂霉奖硎緸?“報表 = 多樣的格式 + 動態(tài)的數(shù)據(jù)”。而報表工具呢?用廢話說,就是幫助用戶做報表的工具……不那么廢的話,還是某某百科:報表工具就是幫助用戶用來展現(xiàn)自己輸入數(shù)據(jù),更多時候是將數(shù)據(jù)庫中的數(shù)據(jù),以客戶想要的方式即報表的形式展現(xiàn)出來。
報表的必要性,應(yīng)該是不用討論了,無論在政府監(jiān)管、企業(yè)運營還是一般的組織管理模式中,上級的監(jiān)督考核、下級的匯報請示、平級的協(xié)同交流,都需要定時或不定時地傳遞一些 報表 ,然后以這些報表為基礎(chǔ)進行分析統(tǒng)計。對應(yīng)到信息化工程的軟件開發(fā)項目中,報表功能也就是必不可少的了。而今天,我們要討論的,是要不要報表工具的問題,也就是用報表工具還是寫代碼來實現(xiàn)報表,這才是個問題。
對于萬能的程序員來說,沒有什么問題是一百行代碼解決不了的,如果有,那就再來一百行……只不過,面對翻臉比翻書還快的需求、對外觀樣式的吹毛求疵、越來越復(fù)雜的報表格式和內(nèi)在數(shù)據(jù)關(guān)系、越來越多需要維護的報表數(shù)量,尤其還不得不去修改隔壁的隔壁的隔壁老王寫的千百萬行代碼時, 估計千言萬語都會化成一句:專業(yè)的事還是讓專業(yè)的人去干吧。沒錯,報表工具就是專業(yè)的,而且可以專業(yè)到讓業(yè)務(wù)人員實現(xiàn)做報表,甚至構(gòu)建快速系統(tǒng)。
讓我們先從一個簡單例子開始,下面是一個羅列所有學(xué)生信息的報表:
很簡單是不是?讓我們這些程序員擼起袖子馬上干,就從熟悉的 java 開始吧……
首先是通過數(shù)據(jù)源,連接數(shù)據(jù)庫提取數(shù)據(jù)。
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) { } 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); } 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" ); append( sb, "\\n" ); } append( sb, "\\n" ); generateHtml( "_$_top", topStartRow, topEndRow, contentStartCol, contentEndCol, sb ); append( sb, "\\n" ); append( sb, "\\n" ); if ( leftHeader != null ) { append( sb, " \\n" ); append( sb, "\\n" ); append( sb, "\\n" ); 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, "