日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
使用JSP實(shí)現(xiàn)簡(jiǎn)易的SQL報(bào)表

這個(gè)內(nèi)容也是根據(jù)企業(yè)學(xué)員的要求準(zhǔn)備的. 其實(shí)這個(gè)小項(xiàng)目是剛畢業(yè)時(shí)候做的, 很多時(shí)候我們希望執(zhí)行下面的SQL/HQL然后得到一個(gè)HTML表格輸出:

十年的云州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整云州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“云州網(wǎng)站設(shè)計(jì)”,“云州網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

輸入: select ID as 編號(hào), NAME as 姓名, AGE as 年齡 from XXX

輸出:

編號(hào) 姓名 年齡
     

要求是如果SQL變動(dòng), 仍然要顯示出來所有的別名字段信息和數(shù)據(jù).

因?yàn)楝F(xiàn)在Hibernate用的比較廣泛, 所以優(yōu)先考慮用Hibernate來實(shí)現(xiàn), 結(jié)果發(fā)現(xiàn)如果是實(shí)體映射查詢語句, 可以方便的用:List Query.getReturnAliases() 獲得別名, 然而我們知道查詢時(shí)有時(shí)候語句是很復(fù)雜的, 不全是HQL, 這時(shí)候用SQLQuery的時(shí)候, 驚訝的提示這個(gè)方法尚未實(shí)現(xiàn)(***版的Hibernate 3.3 是否實(shí)現(xiàn)尚未測(cè)試), 用的版本是Hibernate 3.2, 對(duì)應(yīng)的代碼是:

DAO

/**
 * 根據(jù)查詢語句返回結(jié)果, 并包含結(jié)果的列名
 * @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計(jì)算返回一般都是對(duì)象
    
    return list;        
}

測(cè)試代碼:

List
     
       list = dao.queryAllForReport("select id as 編號(hào), 
			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實(shí)現(xiàn)了這個(gè)功能, 詳細(xì)代碼(自己進(jìn)行修改即可實(shí)現(xiàn))如下:

﹤%@ 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報(bào)表﹤/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﹥${param.sql}﹤/textarea﹥﹤br﹥
   ﹤input type=submit value=查詢﹥
   ﹤/form﹥
  
  ﹤c:if test="${!empty param.sql}"﹥

   ﹤%
  //new oracle.jdbc.driver.OracleDriver();
   Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.41:1521:xe", "hr", "hr");
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery(request.getParameter("sql"));
  
   if(rs == null) {
       stmt.close();
       conn.close();
       return;
   }
  
   // 取列名
   ResultSetMetaData meta = rs.getMetaData();
   int cols = meta.getColumnCount();
   ArrayList colNames = new ArrayList();
  
   for(int i = 1; i ﹤= cols; i++) {
       colNames.add(meta.getColumnLabel(i));
   }
  
   request.setAttribute("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(rs.next()) {
      colNames.clear();
     
       for(int i = 1; i ﹤= cols; i++) {
           Object value = rs.getObject(i);
           System.out.println(value.getClass());
          
           // TODO 更多格式化控制
           if(value instanceof java.sql.Date) {
               value = rs.getTimestamp(i);// 取出精確日期
               java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy年MM月dd日HH點(diǎn)mm分ss秒EEE");
               value = df.format(value);
           }
          
           if(value instanceof java.math.BigDecimal) {
               java.math.BigDecimal v = (java.math.BigDecimal)value;
               value = v.doubleValue();
                // 要求輸出時(shí)候最少顯示兩位小數(shù), 最多輸出小數(shù)點(diǎn)后3個(gè)數(shù)
                java.text.NumberFormat format = java.text.NumberFormat.getInstance();// 只對(duì)小數(shù)格式化
                format.setMaximumFractionDigits(2);// 最多3位小數(shù)
                format.setMinimumFractionDigits(1);// 最少2位小數(shù)
                value = format.format(value);// ==﹥ String
           }
          
           colNames.add(value);
       }
      
      request.setAttribute("colNames", colNames);
     
      %﹥
      ﹤tr﹥
           ﹤c:forEach items="${colNames}" var="c"﹥
           ﹤td﹥${c}﹤/td﹥
           ﹤/c:forEach﹥
         ﹤/tr﹥
      ﹤%
     
  }
  
   rs.close();
   stmt.close();
   conn.close();
   %﹥
   ﹤/table﹥
   ﹤/c:if﹥
  ﹤/body﹥
﹤/html﹥

用到了JSTL和EL, 總的來說要改版還是很方便的. 但是運(yùn)行需要比較高的Tomcat版本, 如5.5以上, 并需要JSTL類庫(kù). 不過, 類似的模版項(xiàng)目開源框架應(yīng)該是很多很多的, 例如眾多的Report框架.


網(wǎng)站題目:使用JSP實(shí)現(xiàn)簡(jiǎn)易的SQL報(bào)表
文章分享:http://www.5511xx.com/article/cdppoco.html