`
sd8089730
  • 浏览: 258574 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

JSTL SQL标签

 
阅读更多

推荐博客: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" %>

设置数据源

使用<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

 

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

例如连接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所示。

maxRowsstartRow属性用来操作结果集,使用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>标签进行数据库查询,并定义了maxRowsstartRow属性。并把结果集存储于作用于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>用来实现操作数据库如:使用createupdatedeleteinsertSQL语句,并返回影响记录的条数。

【语法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>标签的属性相比只减少了maxRowsstartRow2个属性。其他参数用法一样。

使用<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网络标签与SSH类参考手册

    3. **JSTL SQL标签** SQL标签库允许在JSP页面上执行数据库查询,但现代Web应用通常更倾向于使用DAO层来处理这些操作,以保持MVC架构的清晰性。 4. **JSTL XML标签** XML标签库支持XML文档的处理,包括XPath表达式...

    JSTL标签.zip

    JSTL SQL标签库** SQL标签库用于执行数据库查询、事务管理等操作。这些标签包括: - `&lt;sql:query&gt;`:执行SQL查询语句。 - `&lt;sql:update&gt;`:执行SQL更新语句。 - `&lt;sql:transaction&gt;`:管理数据库事务。 **4. ...

    jstl标签库jar包、例子、jstl中文帮助文档

    JSTL SQL标签** - **&lt;sql:query&gt;**:执行SQL查询。 - **&lt;sql:update&gt;**:执行SQL更新语句。 - **&lt;sql:param&gt;**:传递参数到SQL语句。 - **&lt;sql:transaction&gt;**:管理数据库事务。 **6. JSTL XML标签** - ****:...

    jstl java 标签库

    4. JSTL SQL标签库: 支持执行SQL查询、更新、删除和插入操作。`&lt;sql:query&gt;`用于执行SQL查询,结果可以存储在JSP作用域中供后续使用。 5. JSTL XML标签库: 处理XML文档,包括解析、操作和转换XML。`&lt;x:parse&gt;`...

    jstl标签jstl--jstl.jar-standard.jar

    JSTL SQL标签库** JSTL SQL库提供了一组与数据库交互的标签,包括执行SQL查询、更新、插入和删除操作。然而,由于安全和性能原因,实际项目中较少使用,通常推荐使用Java Persistence API (JPA) 或 Hibernate 这样...

    JSTL标签配置文件

    3. **JSTL SQL标签库** 支持数据库查询和操作,包括执行SQL查询、处理结果集等。 4. **JSTL XML标签库** 处理XML文档,如解析、创建和操作XML数据。 5. **配置JSTL** 要在JSP项目中使用JSTL,首先需要将`jstl-...

    JSTL标签库使用需要的两个jar包

    JSTL的SQL标签库允许开发者执行数据库查询、更新、插入和删除操作,尽管在现代Web应用中,这些功能通常由持久层框架如Hibernate或JPA来实现,但在一些简单的场景下,JSTL SQL标签库仍具有一定的实用性。 为了在项目...

    jstl in action jstl标签 国际化

    3. **JSTL SQL标签库**: 提供了与数据库交互的功能,如`&lt;sql:update&gt;`执行SQL更新,`&lt;sql:query&gt;`执行查询,`&lt;sql:resultSet&gt;`处理查询结果。 4. **JSTL XML标签库**: 用于处理XML文档,如`&lt;x:parse&gt;`解析XML,`...

    jstl标准标签库相关的jar文件

    5. **JSTL SQL标签库**: 用于执行数据库查询和操作,虽然现在不推荐在JSP中直接进行数据库操作,但在过去,`&lt;sql:query&gt;`和`&lt;sql:update&gt;`等标签被广泛使用。 **相关jar文件** - **jstl.jar**: 包含了JSTL的核心...

    jstl学习源码

    JSTL 的核心功能包括表达式语言(EL)、I/O、XML、SQL 和国际化标签。在本源码学习中,我们将重点探讨 JSTL 的使用方法和常见应用场景。 **1. JSTL 表达式语言(EL)** JSTL EL 是一个强大的表达式语言,它允许在 ...

    jstl sqlserver mysql驱动包

    标题中的“jstl sqlserver mysql驱动包”指的是一个包含与Java服务器页面标准标签库(JSTL)、SQL Server数据库以及MySQL数据库相关的驱动程序的压缩文件。这个压缩包为开发者提供了一站式解决方案,方便他们在Java...

    JSTL标签 详细易懂

    **JSTL SQL标签库详解:** - `&lt;sql:update&gt;`:执行SQL更新语句。 - `&lt;sql:query&gt;`:执行SQL查询,并获取结果集。 - `&lt;sql:param&gt;`:传递参数给SQL语句。 - `&lt;sql:transaction&gt;`:处理SQL事务。 **JSTL Functions库...

    standard.jar和jstl.jar

    **JSTL SQL标签库** JSTL SQL库允许开发者在JSP页面中执行SQL查询。通过`&lt;sql:query&gt;`、`&lt;sql:update&gt;`、`&lt;sql:delete&gt;`、`&lt;sql:insert&gt;`等标签,可以直接在数据库上执行CRUD操作。然而,由于安全性和性能的原因,...

    jstl学习大全,jstl源码,很全的jstl学习代码

    JSTL sql标签库** sql库用于执行数据库操作,包括连接数据库、执行SQL语句、处理结果集等,如: - `&lt;sql:query&gt;`:执行SQL查询 - `&lt;sql:update&gt;`:执行SQL更新 - `&lt;sql:params&gt;`:传递参数到SQL语句 **5. JSTL xml...

    jstl标签库

    **五、JSTL SQL标签库** 用于与数据库交互,如 `&lt;sql:query&gt;` 执行SQL查询, `&lt;sql:update&gt;` 更新数据, `&lt;sql:params&gt;` 传递参数。 **六、JSTL XML标签库** 1. ****: 解析XML文档。 2. ****: 使用XSLT转换XML...

    JSTL -jar包

    JSTL主要由两个核心部分组成:Core(核心)标签库和JSTL SQL标签库。在"JSTL - jar包"中,通常会包含`standard.jar`和`jstl.jar`这两个文件。** **`standard.jar`是核心标签库,提供了处理基本页面逻辑的功能,如...

    jstl标签的jar包

    5. **JSTL SQL标签库**:用于执行SQL查询和操作数据库,如`&lt;sql:update&gt;`、`&lt;sql:query&gt;`,但现代开发中由于安全和性能原因,不推荐使用。 在Eclipse中,导入JSTL的jar包步骤如下: 1. 首先,你需要下载JSTL的库。...

    jsp用sql标签实现的投票系统

    1. **JSP SQL 标签库**:在JSP中,SQL标签库(如JSTL SQL)简化了与数据库的交互。JSTL(JavaServer Pages Standard Tag Library)是一组标准标签库,包括SQL、Core、XML、Function等多个标签集。在本投票系统中,`...

    jstl-api-1.2.jar

    虽然在现代开发中,通常推荐使用更高级的框架如Hibernate或JPA,但在一些简单场景下,JSTL SQL标签库依然实用。例如`&lt;sql:update&gt;`, `&lt;sql:query&gt;`, `&lt;sql:transaction&gt;`等。 **JSTL 1.2版本的改进与特点** 1. **...

Global site tag (gtag.js) - Google Analytics