Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29307343
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Java

2010-05-01 13:24:21

目标:在jsp页面上通过自定义标签,查询数据库。

 

Java代码
  1. package org.vv.taglib;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.Writer;  
  5. import java.sql.Connection;  
  6. import java.sql.DriverManager;  
  7. import java.sql.ResultSet;  
  8. import java.sql.ResultSetMetaData;  
  9. import java.sql.SQLException;  
  10. import java.sql.Statement;  
  11.   
  12. import javax.servlet.jsp.JspTagException;  
  13. import javax.servlet.jsp.tagext.TagSupport;  
  14.   
  15. public class QueryTag extends TagSupport {  
  16.   
  17.     private static final long serialVersionUID = 1L;  
  18.     // 标签的属性  
  19.     private String driver;  
  20.     private String url;  
  21.     private String user;  
  22.     private String password;  
  23.     private String sql;  
  24.     // 执行数据库访问的对象  
  25.     private Connection conn = null;  
  26.     private Statement stmt = null;  
  27.     private ResultSet rs = null;  
  28.     private ResultSetMetaData rsmd = null;  
  29.   
  30.     // 标签属性 driver url user password sql 的getter/setter方法  
  31.     public String getDriver() {  
  32.         return driver;  
  33.     }  
  34.   
  35.     public void setDriver(String driver) {  
  36.         this.driver = driver;  
  37.     }  
  38.   
  39.     public String getUrl() {  
  40.         return url;  
  41.     }  
  42.   
  43.     public void setUrl(String url) {  
  44.         this.url = url;  
  45.     }  
  46.   
  47.     public String getUser() {  
  48.         return user;  
  49.     }  
  50.   
  51.     public void setUser(String user) {  
  52.         this.user = user;  
  53.     }  
  54.   
  55.     public String getPassword() {  
  56.         return password;  
  57.     }  
  58.   
  59.     public void setPassword(String password) {  
  60.         this.password = password;  
  61.     }  
  62.   
  63.     public String getSql() {  
  64.         return sql;  
  65.     }  
  66.   
  67.     public void setSql(String sql) {  
  68.         this.sql = sql;  
  69.     }  
  70.   
  71.     // 标签处理  
  72.     public int doEndTag() throws JspTagException {  
  73.         // 注册驱动  
  74.         try {  
  75.             Class.forName(driver);  
  76.             // 获取数据库连接  
  77.             conn = DriverManager.getConnection(url, user, password);  
  78.             // 创建Statement对象  
  79.             stmt = conn.createStatement();  
  80.             // 执行查询  
  81.             rs = stmt.executeQuery(sql);  
  82.             rsmd = rs.getMetaData();  
  83.             // 获取列数目  
  84.             int columnCount = rsmd.getColumnCount();  
  85.             // 获取页面输出流  
  86.             Writer out = pageContext.getOut();  
  87.             // 在页面输出表格  
  88.             out.write("");  
  89.             // 遍历结果集  
  90.             out.write("");  
  91.             for (int i=0;i
  92.                 out.write("");  
  93.                 out.write(rs.getMetaData().getColumnName(i+1));   
  94.                 out.write("");  
  95.             }  
  96.             out.write("");  
  97.             while (rs.next()) {  
  98.                 out.write("");  
  99.                 // 逐列输出查询到的数据  
  100.                 for (int i = 1; i <= columnCount; i++) {  
  101.                     out.write("");  
  102.                     out.write(rs.getString(i));  
  103.                     out.write("");  
  104.                 }  
  105.                 out.write("");  
  106.             }  
  107.         } catch (ClassNotFoundException e) {  
  108.             e.printStackTrace();  
  109.         } catch (SQLException e) {  
  110.             e.printStackTrace();  
  111.         } catch (IOException e) {  
  112.             e.printStackTrace();  
  113.         } finally {  
  114.             destroy();  
  115.         }  
  116.   
  117.         return EVAL_PAGE;  
  118.     }  
  119.   
  120.     // 销毁标签前调用的方法  
  121.     public void destroy() {  
  122.         // 关闭结果集  
  123.         if (rs != null) {  
  124.             try {  
  125.                 rs.close();  
  126.             } catch (SQLException e) {  
  127.                 e.printStackTrace();  
  128.             }  
  129.         }  
  130.         // 关闭Statement  
  131.         if (stmt != null) {  
  132.             try {  
  133.                 stmt.close();  
  134.             } catch (SQLException e) {  
  135.                 e.printStackTrace();  
  136.             }  
  137.         }  
  138.         // 关闭数据库连接  
  139.         if (conn != null) {  
  140.             try {  
  141.                 conn.close();  
  142.             } catch (SQLException e) {  
  143.                 e.printStackTrace();  
  144.             }  
  145.         }  
  146.     }  
  147. }