推荐博客:http://blog.sina.com.cn/s/blog_4f925fc30101820u.html

怕博主把原文删了,所以在这里先保存一下、

SQL标签库

JSTL提供了与数据库相关操作的标签,可以直接从页面上实现数据库操作的功能,在开发小型网站是可以很方便的实现数据的读取和操作。本章将详细介绍这些标签的功能和使用方法。

SQL标签库从功能上可以划分为两类:设置数据源标签、SQL指令标签。

引入SQL标签库的指令代码为:

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

1 设置数据源

使用<sql:setDataSource>标签可以实现对数据源的配置。

【语法1】:直接使用已经存在的数据源。

<sql:setDataSource dataSource=”dataSource”[var=”name”]

[scope=”page|request|session|application”]/>

【语法2】:使用JDBC方式建立数据库连接。

<sql:setDataSource driver=”driverClass” url=”jdbcURL”

user=”username”

password=”pwd”

[var=”name”]

[scope=”page|request|session|application”]/>

【参数说明】:见表9-15

表9-15 <sql:DataSource>标签属性说明

参数名

说明

EL

类型

必须

默认值

dataSource

数据源

是

String

Javax.sql.DataSource

否

无

driver

使用的JDBC驱动

是

String

否

无

url

连接数据库的路径

是

String

否

无

user

连接数据库的用户名

是

String

否

无

password

连接数据库的密码

是

String

否

无

var

指定存储数据源的变量名

否

String

否

无

scope

指定数据源存储的JSP范围

否

String

否

page

提示:是否必须是相对的,比如说如果使用数据源则,driver、url等就不再被使用。如果使用JDBC则要用到driver、url、user、password属性。

例如连接SQL Server需要进行如下配置:

Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"

url=” jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=pubs"

user=”sa”

password=””

使用<fmt:setDataSource>配置的代码如下:

<fmt:setDataSource driver=”com.microsoft.jdbc.sqlserver.SQLServerDriver”

url=”jdbc.microsoft:sqlserver://localhost:1433;DatabaseName=pubs”

user=”sa”

password=””>

如果连接其他数据库,只须把相对应的项修改即可。

提示:可以把数据连接的配置存入session中,如果再用到数据库连接只须配置使用DataSource属性。

2 SQL操作标签

JSTL提供了<sql:query>、<sql:update>、<sql:param>、<sql:dateParam>和<sql:transaction>这5个标签,通过使用SQL语言操作数据库,实现增加、删除、修改等操作。下面将介绍这5个标签的功能和使用方式。

1.<sql:query>标签

<sql:query>标签用来查询数据。

【语法1】:

<sql:query sql=”sqlQuery” var=”name” [scope=”page|request|session|application”]

[dataSource=”dateSource”]

[maxRow=”maxRow”]

[startRow=”starRow”]/>

【语法2】:

<sql:query var=”name” [scope=”page|request|session|application”]

[dataSource=”dateSource”]

[maxRow=”maxRow”]

[startRow=”starRow”]

>

sqlQuery

</sql:query>

【属性说明】:见表9-16。

表9-16 <sql:query>标签属性说明

参数名

说明

EL

类型

必须

默认值

sql

查询数据的SQL语句

是

String

是

无

dataSource

数据源对象

是

String

Javax.sql.DataSoutce

否

无

maxRow

设定最多可以暂存数据的行数

是

String

否

无

startRow

设定从那一行数据开始

是

String

否

无

var

指定存储查询结果的变量名

否

String

是

无

scope

指定结果的作用域

否

String

否

page

使用<sql:query>必须指定数据源,dataSource是可选的,如果未给定该属性标签会在page范围内查找是否设置过数据源,如果没有找到将抛出异常。

一般情况下使用<sql:setDateSource>标签设置一个数据源存储在session范围中,当需要数据库连接时使用dataSource属性并实现数据库的操作。

<sql:query>的var属性是必须的用来存放结果集,如果没有指定scope范围则默认为page,即在当前页面我们可以随时输出查询结果。结果集有一系列的属性如表9-17所示。

maxRows和startRow属性用来操作结果集,使用SQL语句首先吧数据放入内存中,检查是否设置了startRow属性,如果设置了就从starRow指定的那一行开始取maxRows个值,如果没有设定则从第一行开始取。

表9-17 结果集参数说明

属性名

类型

说明

rowCount

int

结果集中的记录总数

Rows

Java.util.Map

以字段为索引查询的结果

rowsByIndex

Object[]

以数字为作索引的查询结果

columnNames

String[]

字段名称数组

limitedByMaxRows

boolean

是否设置了maxRows属性来限制查询记录的数量

提示:limitedByMaxRows用来判断程序是否收到maxRows属性的限制。并不是说设定了maxRows属性,得到结果集的limitedByMaxRows的属性都为true,当取出的结果集小于maxRows时,则maxRows没有对结果集起到作用此时也为false。例如可以使用startRow属性限制结果集的数据量。

结果集的作用就是定义了数据在页面中的显示方式。下面给出了结果集每个属性的作用。

q        rowCount属性。该属性统计结果集中有效记录的量,可以使用于大批量数据分页显示。

q        Rows属性。等到每个字段对应的值。返回的结果为:字段名={字段值···}

q        rowsByIndex属性。常用得到数据库中数据的方式,从有效行的第一个元素开始遍历,到最后一个有效行的最后一个元素。

q        columnNames属性。用于得到数据库中的字段名。

q        limitedByMaxRows属性。用于判断是否受到了maxRows的限制。

【示例代码】:代码9.20给出了配置数据库连接,和使用<sql:query>查询数据以及结果集属性的使用。

代码9.20 数据库示查询示例:sqldemo01.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<%@ page contentType="text/html;charset=GBK"%>

<html>

<head>

<title>JSTL: SQL标签</title>

</head>

<body >

<h3>SQL标签库</h3>

<hr>

<sql:setDataSource driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"

url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"

user="sa" password="" />

<sql:query var="result" sql="select * from person" maxRows="2" startRow="1"/>

结果集的实质是:${result}<br>

得到的行数为:${result.rowCount}<br>

是否收到了maxRows的限制:${result.limitedByMaxRows}

<hr>

<table border="1" align="center">

<tr><c:forEach var="columnName" items="${result.columnNames}">

<td>

<c:out value="${columnName}"/>

</td>

</c:forEach> </tr>

<c:forEach var="row" items="${result.rowsByIndex}">

<tr>

<c:forEach var="column" items="${row}">

<td><c:out value="${column}"/></td>

</c:forEach>

</tr>

</c:forEach>

</table>

</body>

</html>

【代码解析】:

(1)配置数据源。使用<sql:dataSource>标签配置数据源,因为只共本页使用因此存储在默认的page范围中。

(2)使用<sql:query>标签进行数据库查询,并定义了maxRows和startRow属性。并把结果集存储于作用于page范围的result变量。使用${result}输出可以发现结果集就是一个ResultImpl类。

提示:在进行数据源配置时程序不会检查数据库连接是否配置正确,直接根据设定的数据库及连接访问,如果没有找到则抛出操作的表异常,因此要放如<c:catch></c:catch>同时在编写程序时一定要注意数据源是否配置正确。

(3)使用结果集的rowCount属性得到记录的总量。代码为:

${result.rowCount}

(4)使用结果集的limitedMaxRows属性判断是否收到maxRows设定的影响。代码为:

${result.limitedMaxRows}

(5)从结果集中得到数据库中定义的所有的字段。${result.columnnames}得到的结果是一个字符串数组,因此需要使用<c:forEach>循环输出。代码如下:

<c:forEach var="columnName" items="${result.columnNames}">

<c:out value="${columnName}"/>

</c:forEach>

(6)从结果集中得到所有的值。首先要遍历每一行,然后遍历每一行中的元素,因此需要循环嵌套。代码如下:

<c:forEach var="columnName" items="${result.columnNames}">

<c:out value="${columnName}"/>

</c:forEach>

<c:forEach var="row" items="${result.rowsByIndex}">

<c:forEach var="column" items="${row}">

<c:out value="${column}"/></td>

</c:forEach>

</c:forEach>

提示:在代码解析中省略了html元素表格等标签的元素,本示例适用于任何数据库表,只要把数据库的URL、使用的JDBC进行相应的配置和操作的数据表名进行相应的修改即可看到结果。

2.<sql:update>标签

<sql:update>用来实现操作数据库如:使用create、update、delete和insert等SQL语句,并返回影响记录的条数。

【语法1】:SQL语句放在标签属性中。

<sql:update sql=”SQL语句” [var=”name”] [scope=”page|request|session|application”]

[dateSource=”dateSource”]/>

【语法2】:SQL语句放在标签体内。

<sql:update [var=”name”] [scope=”page|request|session|application”]

[dateSource=”dateSource”]

>

SQL语句

</sql:update>

【参数说明】:见表9-18。

表9-18 <sql:update>标签属性说明

参数名

说明

EL

类型

必须

默认值

sql

查询数据的SQL语句

是

String

是

无

dataSource

数据源对象

是

String

Javax.sql.DataSoutce

否

无

var

指定存储查询结果的变量名

否

String

是

无

scope

指定结果的作用域

否

String

否

page

提示:<sql:update>标签的属性同<sql:query>标签的属性相比只减少了maxRows和startRow2个属性。其他参数用法一样。

使用<sql:update>可以实现数据表的创建、插入数据、更行数据、删除数据。使用时只须在标签中放入正确的SQL语句即可,同时要捕获可能产生的异常。本节只对一个简单的插入操作进行说明。

【示例代码】:代码9.21实现了创建一个表、实现数据的插入。

代码9.21 数据库创建、数据插入示例:sqldemo02.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<%@ page contentType="text/html;charset=GBK"%>

<html>

<head>

<title>JSTL: SQL标签</title>

</head>

<body >

<h3>SQL标签库</h3>

<hr>

<sql:setDataSource driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"

url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"

user="sa" password="" />

实现数据库表的创建<br>

<sql:update var="result1">

create table c_user (

id int primary key ,

name varchar(80),

sex varchar(80),

)

</sql:update>

<c:catch var="error">

<sql:update var="result2" >

insert c_user values(05,'Linda','女')

insert c_user values(01,'Rom','男' )

</sql:update>

影响的记录数为:<c:out value="${result2}"></c:out>

</c:catch>

<c:out value="${error}"></c:out><br>

<hr>

</body>

</html>

【代码解析】:

(1)配置数据源。

(2)使用<sql:update>标签创建一个新表。

(3)向表中插入两行数据。

提示:本示例也没有针对固定的表进行操作,在使用时直接运行即可,如果使用的是其他数据库,需要更改数据源配置和SQL语句部分修改。

使用<sql:update>的var属性记录结果是不准确的,尤其是在一个标签中使用多条sql语句只能记录下第一条。

3.<sql:param>标签

<sql:param>标签用于动态的为SQL语句设定参数,同<sql:query>标签共同使用。可以防止SQL注入作用类似于java.sql.PreparedStatement。

【语法1】:

<sql:param value=”value”/>

【语法2】:

<sql:param>

Value

</sql:param>

【参数说明】:

value的作用为SQL中的参数赋值。

【使用示例】:

<sql:query var=”result”>

select * from person where 序号=?

<sql:query>

4.<sql:dateParam>标签

<sql:dataParam>标签主要用于为SQL标签填充日期类型的参数值。

【语法】:

<sql:dateParam value=”date”[type=”timestamp|time|date”]/>

【参数说明】:

q        value属性:java.util.Date类型的参数。

q        type属性:指定填充日期的类型timestamp(全部日期和时间)、time(填充的参数为时间)、date(填充的参数为日期)。

5.<sql:transaction>标签

<sql:transaction>标签提供了数据操作的一种安全机制(即事务回滚),当操作数据库的某条SQL语句发生异常时,取消<sql:transaction>标签体中的所有操作,恢复原来的状态,重新对数据库进行操作。

【语法】:

<sql:transaction [dataSource=”dataSource”]

[isolation=”read_committed|read_uncommitted|repeatable|serializable”]

>

<sql:query>

<sql:uptade>

</sql:transation>

JSTL SQL标签库 使用的更多相关文章

  1. 转: JSTL SQL标签库 使用

    SQL标签库 JSTL提供了与数据库相关操作的标签,可以直接从页面上实现数据库操作的功能,在开发小型网站是可以很方便的实现数据的读取和操作.本章将详细介绍这些标签的功能和使用方法. SQL标签库从功能 ...

  2. JSP标准标签库(JSTL)--SQL标签库 sql

    了解即可.SQL标签库 No. 功能分类 标签名称 描述 1 数据源标签 <sql:setDataSource> 设置要使用的数据源名称 2 数据库操作标签 <sql:query&g ...

  3. 小峰servlet/jsp(7)jstl国际化标签库、sql标签库等

    一.jstl国际化标签库: fmt:setLocale 设定用户所在的区域: fmt:formatDate   对日期进行格式化 fmt:requestEncoding 设置所有的请求编码; fmt: ...

  4. (4)JSTL的SQL标签库

    jstl的SQL标签库 SQL tag Library中的标签用来提供在 JSP 页面中可以与数据库进行交互的功能Database access标签库有以下6组标签来进行工作: <sql:set ...

  5. java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结

    2016-09-0111:06:53                                     使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...

  6. Java Servlet(十):JSTL核心标签库

    JSTL全名称:JaveServer Pages Standard Tag Library.JSTL是由JCP(Java Community Process)所定制的标准规范,它主要提供给Java W ...

  7. JSTL标准标签库

    有时使用EL和标准动作达不到目的,于是就引入定制标记. 对于JSP页面创作人员来说,定制标记使用起来比脚本要容易一些.不过对于JAVA程序员来说,简历定制标记处理器反而更困难.幸运的是,已经有了一个标 ...

  8. ⑤早起的鸟儿有虫吃-JSTL核心标签库[收藏]

    介绍 JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库. Web  ...

  9. Javaweb学习笔记——(十三)——————JSTL、JSTL核心标签库、自定义标签、有标签体的标签、带有属性的标签、MVC、Javaweb三层框架

    JSTLApache提供的标签库 jar包:jstl-1.2.jar,如果传MyEclipse,他会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入.--------- ...

随机推荐

  1. Python通过ssh连接服务器并执行命令

    [本文出自天外归云的博客园] 脚本示例如下: # coding:utf-8 import time,paramiko,re,StringIO def exec_shell(command): ''' ...

  2. linux中chmod与chown两个命令详解

    在linux系统中chmod,chown命令都可以来设置权限了,但它们也是有区别的,下文小编为各位介绍chmod与chown两个命令用法与区别介绍. 今天要分享的2个命令也是我们平时常用的,chmod ...

  3. tensorboard简单使用

    代码写的再好,没有图别人也不知道好在哪. 我们在使用tensorflow的时候,使用tensorboard可以直观的看到我们的网络结构,甚至它可以计算卷积和池化的维度(我不知道是不是因为我已经运行了一 ...

  4. JavaScript高级 面向对象(11)--对象的动态特性-关联数组用法

    说明(2017.4.2): 1. 对象的动态特性: (1)在js中,一个对象需要属性,就可以利用“对象名.属性 = 值”的方式为其添加,只要赋值成功,对象就新增这个属性. (2)对象属性的访问形式: ...

  5. [emacs] org-mode的一些小技巧

    Table of Contents 1 快速输入 #+BEGIN_SRC … #+END_SRC 2 代码按语法高亮 3 导出成HTML时的一些问题和技巧 3.1 生成目录表 3.2 为每个分节的标题 ...

  6. Android学习笔记(38):Handler消息传递处理机制

    先说为什么须要Handler: Android的主线程又叫UI线程,用于处理与UI相关的时间.Android仅仅同意在主线程中改动UI组件,当我们在其它线程中须要改动UI界面时.就须要发送消息到主线程 ...

  7. .net 定时启动任务

    .net winform程序,设置每天的零时启动,执行完后自动关闭. 系统计划启动: 如果要定时启动某个程序,可以通过“任务计划”来安排. 如果是XP系统,在开始 --> 所有程序 --> ...

  8. ansible普通用户su切换

    [root@361way.com ~]# cat /etc/ansible/hosts [test01] 10.212.52.14 ansible_ssh_user=test ansible_ssh_ ...

  9. PCL常见错误集锦

    来自微信公众号的分享 我刚刚开始接触PCL,懂的东西也很少,所以总是出现各种各样的问题,每次遇见问题的时候要查找各种各样的资料,很费时间.所以,今天我把我遇见的常见问题分享给大家,讲解的步骤尽量详细, ...

  10. HashTable和HashMap的区别详解

    一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的, ...