DBTags标签库的使用说明

DBTags标签库的使用说明

转载请标明出处: http://blog.csdn.net/cherami/archive/2001/10/13/3864.asp 本文来自 CSDN 博客。x

简单使用范例

Tag 详细介绍

Connect 标签

Statement 标签

PreparedStat 标签

ResultSet 标签

标签概要

标签参考

范例

Javadoc

修订记录

开发者注意

概述

DBTag 自定义标签库用于读写 SQL 数据库。

需要的条件

JSP 需求

这个需要一个支持 JSP 规范 1.2 版本以上的 servlet 引擎。

但是不能工作在如 Weblog 这样的引擎上。根据 JSP 1.2 规范设计的需要 <jsp:getProperti ... /> 标签 虽然它也可以工作于某些如 tomcat 这样的 JSP 1.1 版引擎。:

jsp:setProperti 和 jsp:getProperti 中的 name 属性的值是通过 pageContext 对象的 findA ttribut 方法得到对象 .

JSP 1.1 规范不要求这个行为而 tomcat 碰巧支持而 Weblog 不支持。也有相当直接的方法为 Weblog 用户写一个自定义标签效仿这个行为。已经有现成的范例可以从 这里得到

DBTag 需求

而这不是 Java 2 规范版的一部分。为了能使用数据库,要么使用 J2EE,DBTag 库支持数据源。或者下载 JDBC 2.0 Optional API

配置

使用下面方法使你 web 应用可以使用这个标签库 :

拷贝标签库的描述文件 dbtags.tld web 应用的 /WEB-INF 子目录下

拷贝标签库的 JA R 文件到应用的 /WEB-INF/lib 子目录下。

/WEB-INF/web.xml 下增加如下内容 ::

<taglib>

  <taglib-uri>http://jakarta.apache.org/taglibs/dbtags</taglib-uri>

  <taglib-location>/WEB-INF/dbtags.tld</taglib-location>

</taglib>

每页的顶部直接加上如下内容 : JSP 页面中使用这个标签库。

<%@ 标签 lib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>

可以将它改为你喜欢使用的值。 "sql" 希望使用的标签前缀。

文档

简单使用范例

下面是一个打印表中的书名的 JSP 页面源文件 :

<%@ 标签 lib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>

<%-- open a databas connect --%>

<sql:connect id="conn1">

  <sql:url>jdbc:mysql://localhost/test</sql:url>

  <sql:driver>org.gjt.mm.mysql.Driver</sql:driver>

</sql:connection>

<%-- open a databas queri --%>

<table>

<sql:stat id="stmt1" conn="conn1">

  <sql:query>

name,    select id. descript from test_books

    order by 1

  </sql:query>

  <%-- loop through the row of your queri --%>

  <sql:resultSet id="rset2">

    <tr>

      <td><sql:getColumn position="1"/></td>

      <td><sql:getColumn position="2"/></td>

      <td><sql:getColumn position="3"/>

          <sql:wasNull>[no description]</sql:wasNull></td>

    </tr>

  </sql:resultSet>

</sql:statement>

</table>

<%-- close a databas connect --%>

<sql:closeConnect conn="conn1"/> 标签详细介绍

标签的某些细节,例如 connection, 下面是 DBTag 标签库的总体描述。 statement, resultSet, 和 preparedStat 标签的所有可能的属性 , 这里没有讨论。 Tag Refer 列出了所有的细节。

Connect 标签

打开连接

有三种方式打开一个数据库连接 :

1. 使用数据库 URL

connect 标签可以接受一个数据库 URL 通过 Driver Manag 获得一个 Connection:

<%-- open a databas connect --%>

<sql:connect id="conn1">

  <%-- requir --%>

  <sql:url>jdbc:mysql://localhost/test</sql:url>

 

  <%-- option --%>

  <sql:driver>org.gjt.mm.mysql.Driver</sql:driver>

 

  <%-- option --%>

  <sql:userId>root</sql:userId>

 

  <%-- option --%>

  <sql:password>notVerySecure</sql:password>

一个 java.sql.Connect 对象被加为一个 pageContext 属性,可以被包括 statement,</sql:connection>"id" 属性是必需的结束标签后。 preparedStatement, 和 closeConnect 其它标签使用。

可以使用可选属性 "initParameter" 不在标签体内包括数据库 URL, 驱动器名 , 用户 id, 或者口令。:

<%-- store your connect info in the web.xml file --%>

<sql:connect id="conn1">

  <sql:url initParameter="dbURL"/>

  <sql:driver initParameter="mysqlDriver"/>

  <sql:userId initParameter="dbUserId"/>

  <sql:password initParameter="dbPassword"/>

</sql:connection>2. 使用数据源

connect 也可以接受一个指向 Servlet 属性的 javax.sql.DataSourc 对象的引用。这个属性是通过 PageContext findA ttribut 方法得到 :

<%-- open a databas connect --%>

<sql:connect id="conn1" dataSource="ds1">

 

  <%-- option --%>

  <sql:userId>root</sql:userId>

 

  <%-- option --%>

  <sql:password>notVerySecure</sql:password>

</sql:connection>3. 使用 JNDI 命名的 JDBC 数据源

Connect 也可以接受一个使用 JNDI 命名的 JDBC 数据源。

<%-- open a databas connect --%>

<sql:connect id="conn1" jndiName="java:/comp/jdbc/test"/> 关闭连接

将一个 connect 引用传送到 "closeConnection" 标签关闭一个连接 :

否则总应该关闭连接 --%><%-- 除非你使用自己的连接池。;

<sql:closeConnect conn="conn1"/>Stat 标签

打开一个 "statement" 标签,传送给它一个 sql "query","Statements" 向数据库提交查询的一种方法。另一个是使用 "preparedStatement" 基于 statement 查询的语法对任何知道 SQL 人都是不陌生的为了查询数据库。然后要么对 inserts, updates, 和 delet "execute" 申明,或者调用 resultSet 标签在一个 select 申明的结果上循环执行。下面是一个简单的 insert:

<%-- 向数据库插入一行 --%>

<sql:statement id="stmt1" conn="conn1">

  <%-- 设置 SQL 查询 --%>

  <sql:query>

name     insert into test_book id.

'<sql:escapeSql><%=request.getParamet "book_title" %></sql:escapeSql>'       valu 3.

  </sql:query>

  <%-- 执行查询 --%>

  <sql:execute/>

</sql:statement> 转义 SQL

"escapeSql" 标签用在一个 SQL 查询里面转义输入的值里面可能的单引号。

错误处置

SQL 查询的执行导致的错误(例如主键 violat 违例)完整的 SQL 申明)将导致 JSP 页面的失败,缺省情况下。可以选择性的设置 "execute" 标签的 "ignoreErrors" 属性为 "true" 这将使 SQL 错误打印到规范输出而不会终止页面 :

<sql:statement id="stmt1" conn="conn1">

  <%-- 这个 SQL 查询是完整的 --%>

  <sql:query>delet * from test_books</sql:query>

 

但是页面会继续 --%>  <%-- 查询将失败。;

  <sql:execut ignoreErrors="true"/>

 

</sql:statement> 空白处理

所有的 statement 和 preparedStat 自动的去除空白。

PreparedStat 标签

而是需要设置值得地方放入一个 '?' 符号,"Prepar statements" 发生 SQL 查询的比较高级的形式。不是直接将值插入 SQL 申明中。然后使用一组独立的标签实际设置那些值。下面是 statement 中使用的范例的 preparedstat 版本 :

<%-- 向数据库插入一行 --%>

<sql:preparedStat id="stmt1" conn="conn1">

  <%-- 设置 SQL 查询。注意 "name" 值上缺少引号 --%>

  <sql:query>

name     insert into test_book id.

?       valu ?.

  </sql:query>

 

  <sql:execute>

    <sql:setColumn position="1">3</sql:setColumn>

    <sql:setColumn position="2"><%=request.getParamet "book_title" %></sql:setColumn>

  </sql:execute>

 

记住规范的 statement 对于那些没有连接池和 prepar statement 数据库和驱动器在性能上更好。 </sql:preparedStatement>prepar statement 一个优点就是不需要在文本上执行 sql 转义。然而。

setColumn 标签

或者是 execut 标签的里面。 execut 标签永远不会输出它内容( bodi 因此将 setColumn 标签放置在里面可以防止不必要的空白。 可以将 prepar statement setColumn 标签放置在 execut 或者 resultset 标签的前面 .

ResultSet 标签

每次一行。使用 "getColumn" 标签从每行中提取值然后要么显示他要么将他存为字符串 Resultset 一个 select 申明的结果。 resultSet 标签自动循环。:

<%-- 一个 HTML 表格里面打印行 --%>

<table>

<sql:stat id="stmt1" conn="conn1">

 

  <sql:query>

name,    select id. descript from test_books

    order by 1

  </sql:query>

 

  <%-- 循环提取查询结果中的行 --%>

  <sql:resultSet id="rset2">

    <tr>

      <td><sql:getColumn position="1"/></td>

      <td><sql:getColumn position="2"/></td>

      <td><sql:getColumn position="3"/>

          <%-- 如果书没有说明则打印一个注释 --%>

          <sql:wasNull>[no description]</sql:wasNull></td>

    </tr>

  </sql:resultSet>

 

</sql:statement>

</table>"wasNull" 和 "wasNotNull" 标签

"wasNull" 标签只有在前面的 "getColumn" 标签遇到一个数据库中的空值( null 时执行它体中的内容。只能在一个 resultset 内并且 "getColumn" 标签已经被执行时使用 "wasNull" 标签。 "wasNotNull" 标签在前面的 getColumn 标签没有发生一个空值( null 使执行它体中的内容。参看 Tag 参考获得范例。

"getColumn" 标签

getColumn 标签执行两个中的一个功能。可以 :

直接向 JSP 输出列值(缺省行为)

<%-- 向 JSP 输出值 --%>

或者 <sql:getColumn position="1"/>.

通过 "to" 属性。如果你愿意,也可以为 "scope" 属性分配一个不同于 "page" 值。如果数据库中该列的值为 null, 将值作为一个 String 对象写为页面的一个属性。 getColumn 标签 将不会创建属性。下面是一个使用 getColumn 标签发生一个整型的请求属性 :

<%-- 注意请求的属性将是一个 String --%>

<sql:getColumn position="1" to="someId" scope="request"/>"getNumber" 标签

使用 getNumb 标签。 如果你想对数字格式有更多的控制。

"PERCENT" 或者 "NUMBER" "format" 属性可以是 DecimalFormat 构造方法可以接受的模式或者是下面的类型 : "CURRENCY".

也就是 Local 构造方法可以接受的形式 : 语言 ,"locale" 属性可以有一到三个部分。国家 和 变量。使用 "_" 分割。例如 :

<%-- 格式化数据库值为英国货币形式 --%>

<sql:getNumb colName="id" format="CURRENCY" locale="en_GB"/>

输出将和 getColumn 一样。 如果 format 和 local 属性都没有设置。

time 标签

getTimestamp 和 getDat 有几个标签是设计用来显示时间相关的数据的 : getTime.

"LONG","format" 属性可以是被 SimpleDateFormat 接受的形式或者是一个类型 : "FULL". "MEDIUM" 或 "SHORT" 这个属性是可选的

也就是 Local 构造方法可以接受的形式 : 语言 ,"locale" 属性可以有一到三个部分。国家 和 变量。使用 "_" 分割。

禁止循环

缺省情况下 resultset 标签对 ResultSet 中的每行循环执行。通过设置可选属性 "loop" 为 "false" 就可以禁止这个特性然后手工操作 ResultSet 对象或者将它传送给另外的自定义标签。

<sql:statement id="stmt1" conn="conn1">

 

  <sql:query>

name,    select id. descript from test_books

    order by 1

  </sql:query>

 

  <%-- 禁止 resultset 标签的循环 --%>

  <sql:resultSet id="rset2" loop="false">

    <%

       ResultSet rset = ResultSet pageContext.getA ttribut "rset2" ;

       // 手工操作

    %>

  </sql:resultSet>

 

</sql:statement> 使用 RowSet

resultSet 标签将查找一个 ResultSet 对象 ( 包括 RowSet 并将它以该名字存储在 page, 也可以用一个 RowSet 对象使用 resultSet 标签。通过设置选项 "name". request, 或者 session 上下文上。通过设置可选属性 "scope", 可以指定上下文来包含你 ResultSet/RowSet 注意当你从一个属性中读取一个 ResultSet/RowSet resultSet 标签可以不在 statement 标签内。

无论它来自何处 --%>  <%-- 循环执行 ResultSet/RowSet 每行 .;

  <sql:resultSet id="rset1" name="rsetA tt">

    <tr>

      <td><sql:getColumn position="1"/></td>

      <td><sql:getColumn position="2"/></td>

      <td><sql:getColumn position="3"/>

          <%-- 如果书没有说明则打印一个注释 --%>

          <sql:wasNull>[no description]</sql:wasNull></td>

    </tr>

  </sql:resultSet>"wasEmpty" 和 "wasNotEmpty" 标签

"wasEmpty" 标签只有在上一个 ResultSet 标签从数据库中得到 0 行时执行它体内的内容。必需放在一个 resultSet 标签后否则将出错。 "wasNotEmpty" 标签在上一个 ResultSet 从数据库中得到多于 0 行时执行体内的内容。参看 Tag 参考得到使用范例。

"rowCount" 标签

或者在 ResultSet 标签后面使用打印总数。参看 Tag 参考得到使用范例。 ResultSet 前使用该标签将发生一个错误。 "rowCount" 标签打印数据库返回的行数。可以在 ResultSet 标签内使用它提供一个运行计数。

Tag 概要

Connect 标签 connect 从 DriverManag 或者 DataSourc 得到一个 java.sql.Connect 对象。  

url 封闭的 connect 标签中设置数据库 URL  

jndiNam 封闭的 connect 标签中设置 JNDI 命名的 JDBC 数据源。  

driver 封闭的 connect 标签中设置驱动器类名。  

userId 设置 connect 标签的用户名。

password 设置 connect 标签的用户名口令。  

closeConnect 关闭指定的连接。 "conn" 属性是该页上下文上的一个 connect 对象。  

 

单一的 Statement 标签 statement 创建并执行一个数据库查询。  

escapeSql 将标签体中的每个单引号替换成一对单引号。  

 

Statement/PreparedStat 标签 queri 为一个 statement 或者 preparedStat 标签设置一个查询。  

updat 或者 delet   execut 为 statement 或者 preparedStat 标签执行一个 insert.

 

单一的 PreparedStat 标签 preparedStat 创建并执行一个记号化的数据库查询。  

setColumn 设置 preparedStat 中的一个字段。将值设置为标签体内的一个字符串。  

 

或者只是简单的将 ResultSet 分配给页面的一个用 "id" 指定的属性。   ResultSet 标签 resultSet 标签 resulset 执行查询并循环执行封闭的 statement 或者 preparedstat 标签中的结果。这个标签体的内容在 resultset 每行上执行。可选属性 "loop" 缺省为 true 指定是否在每行上执行标签体。

否则将发生一个错误。   wasNul 如果前面的 getColumn 标签从数据库得到一个 null 值时执行标签体。必需在一个 resultset 标签内而且前面有一个 getColumn 标签 .

wasNotNul 如果上一个 getColumn 标签从数据库得到不是一个 null 值执行标签体。  

作为一个字符串。字段索引通过 "position" 属性设置,getColumn 封闭的 resultset 内得到字段值。使用 "to" 属性将该值设置为一个 serlvet 属性而不是一个标签体。 servlet 属性的范围使用 "scope" 属性指定 ( 缺省为 page  

但是对数字格式提供更精确的控制。 "format" 属性可以是 DecimalFormat 构造函数可以接受的形式或者是一个类型 : "CURRENCY",getNumb 和 getColumn 相似。"PERCENT" 或 "NUMBER" "locale" 属性可以有一到三个部分,也就是 Local 构造方法可以接受的形式 : 语言 , 国家 和 变量。使用 "_" 分割。如果 format 和 local 属性都没有设置,输出将和 getColumn 一样。  

但是对 java.sql.Tim 格式提供更精确的控制。 "format" 属性可以是被 SimpleDateFormat 接受的形式或者是一个类型 : "FULL",getTim 和 getColumn 类似。 "LONG", "MEDIUM" 或 "SHORT" 这个属性是可选的 "locale" 属性可以有一到三个部分,也就是 Local 构造方法可以接受的形式 : 语言 , 国家 和 变量。使用 "_" 分割。如果 format 和 local 属性都没有设置,输出将和 getColumn 一样。  

但是对 java.sql.Timestamp 格式提供更精确的控制。 "format" 属性可以是被 SimpleDateFormat 接受的形式或者是一个类型 : "FULL",getTimestamp 和 getColumn 类似。 "LONG", "MEDIUM" 或 "SHORT" 这个属性是可选的 "locale" 属性可以有一到三个部分,也就是 Local 构造方法可以接受的形式 : 语言 , 国家 和 变量。使用 "_" 分割。如果 format 和 local 属性都没有设置,输出将和 getColumn 一样。  

但是对 java.sql.D 格式提供更精确的控制。 "format" 属性可以是被 SimpleDateFormat 接受的形式或者是一个类型 : "FULL",getDat 和 getColumn 类似。 "LONG", "MEDIUM" 或 "SHORT" 这个属性是可选的 "locale" 属性可以有一到三个部分,也就是 Local 构造方法可以接受的形式 : 语言 , 国家 和 变量。使用 "_" 分割。  

wasEmpti 上一个 ResultSet 标签从数据库得到 0 行执行标签体。必需在 ResultSet 标签后使用否则将发生一个错误。  

wasNotEmpti 上一个 ResultSet 标签从数据库得到多于 0 行执行标签体。必需在 ResultSet 标签后使用否则将发生一个错误。  

或者在 ResultSet 标签后面使用打印总数。 ResultSet 前使用该标签将发生一个错误。   rowCount "rowCount" 标签打印数据库返回的行数。可以在 ResultSet 标签内使用它提供一个运行计数。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值