主页:http://www.cnblogs.com/EasonJim/p/6958992.html的分支页。

本章的前提需要先新建数据表及添加默认数据,脚本如下:

  1. --
  2. -- 数据库: `test`
  3. --
  4.  
  5. -- --------------------------------------------------------
  6.  
  7. --
  8. -- 表的结构 `student`
  9. --
  10.  
  11. CREATE TABLE IF NOT EXISTS `student` (
  12. `ID` int(11) NOT NULL AUTO_INCREMENT,
  13. `NAME` varchar(20) NOT NULL,
  14. `AGE` int(11) NOT NULL,
  15. PRIMARY KEY (`ID`)
  16. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
  17.  
  18. --
  19. -- 转存表中的数据 `student`
  20. --
  21.  
  22. INSERT INTO `student` (`ID`, `NAME`, `AGE`) VALUES
  23. (1, 'Zara', 11),
  24. (2, 'Nuha', 2),
  25. (3, 'Ayan', 15);

及MySQL的JAR包:

  1. <!-- mysql-connector-java -->
  2. <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  3. <dependency>
  4. <groupId>mysql</groupId>
  5. <artifactId>mysql-connector-java</artifactId>
  6. <version>6.0.6</version>
  7. </dependency>

一、<sql:setDataSource>

<sql:setDataSource>标签设置了数据源配置变量或将数据源信息保存到一个指定范围的变量中,该变量可用作为其他JSTL数据库操作的输入。

属性:

<sql:setDataSource>标签具有如下所示属性:

属性 描述 是否必需 默认值
driver 要被注册的JDBC驱动程序类名
url 数据库连接的JDBC URL
user 数据库用户名
password 数据库密码
password 数据库密码
dataSource 预先准备的数据库
var 展示数据库的变量名 设置默认
scope 展示数据库的变量范围 页面

实例:

对MySQL数据库设置考虑下述信息:

  • 使用的是JDBC MySQL驱动。

  • 将要连接到本地计算机的TEST数据库中。

  • 将使用user_id和password来访问TEST数据库。

所有上述参数会随着MySQL或任何其他数据库设置而变化。记住上述参数,下面是使用setDataSource标签的一个简单的例子:

  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
  3. <html>
  4. <head>
  5. <title>JSTL sql:setDataSource Tag</title>
  6. </head>
  7. <body>
  8.  
  9. <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root" password="root"/>
  10. <sql:query dataSource="${snapshot}" sql="select * from student" var="result" />
  11. <c:forEach var="row" items="${result.rows}">
  12. <c:out value="${row.name}"/>:<c:out value="${row.age}"/><br/>
  13. </c:forEach>
  14. </body>
  15. </html>

这将产生如下所示结果:

二、<sql:query>

<sql:query>标签执行SQL SELECT语句并将结果保存到给定范围的变量中。

属性:

<sql:query>标签具有如下所示属性:

属性 描述 是否必需 默认值
sql 要执行的SQL命令(应返回ResultSet) Body
dataSource 要用的数据库连接(覆盖默认值) 默认数据库
maxRows 存储在变量中的结果的最大值 不限
startRow 结果中开始记录的行数 0
var 显示数据库的变量名 设置默认
scope 显示来自数据库的结果的变量范围 页面

实例:

现在编写一个JSP,使用<sql:query>来执行SQL SELECT语句,如下所示:

  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
  3. <html>
  4. <head>
  5. <title>JSTL sql:setDataSource Tag</title>
  6. </head>
  7. <body>
  8.  
  9. <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root" password="root"/>
  10. <sql:query dataSource="${snapshot}" sql="select * from student" var="result" />
  11. <c:forEach var="row" items="${result.rows}">
  12. <c:out value="${row.name}"/>:<c:out value="${row.age}"/><br/>
  13. </c:forEach>
  14. </body>
  15. </html>

现在尝试访问上述JSP,会出现如下所示结果:

三、<sql:update>

<sql:update>标签执行不返回数据的SQL语句,例如SQL INSERT,UPDATE,或DELETE语句。

属性:

<sql:update>标签具有如下所示属性:

属性 描述 是否必需 默认值
sql 要执行的SQL语句(应不返回ResultSet) Body
dataSource 要使用的数据库连接 (覆盖默认值) 默认数据库
var 存储受影响行数的变量名
scope 存储受影响行数的变量范围 页面

实例:

现在编写JSP,使用<sql:update>标签来执行SQL INSERT语句,从而在表中创建一条记录,如下所示:

  1. <%@ page import="java.io.*,java.util.*,java.sql.*"%>
  2. <%@ page import="javax.servlet.http.*,javax.servlet.*" %>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
  5.  
  6. <html>
  7. <head>
  8. <title>JSTL sql:update Tag</title>
  9. </head>
  10. <body>
  11.  
  12. <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root" password="root"/>
  13.  
  14. <sql:update dataSource="${snapshot}" var="count">
  15. INSERT INTO Student (name,age) VALUES ('Jim', '27');
  16. </sql:update>
  17.  
  18. <sql:query dataSource="${snapshot}" var="result">
  19. SELECT * from Student;
  20. </sql:query>
  21.  
  22. <table border="1" width="100%">
  23. <tr>
  24. <th>ID</th>
  25. <th>Name</th>
  26. <th>Age</th>
  27. </tr>
  28. <c:forEach var="row" items="${result.rows}">
  29. <tr>
  30. <td><c:out value="${row.id}"/></td>
  31. <td><c:out value="${row.name}"/></td>
  32. <td><c:out value="${row.age}"/></td>
  33. </tr>
  34. </c:forEach>
  35. </table>
  36.  
  37. </body>
  38. </html>

现在尝试访问上述JSP,将显示如下所示结果:

四、<sql:param>

<sql:param>标签用于<sql:query><sql:update>标签的嵌套操作,来为一个值的占位符提供值。如果提供了一个空值,那么占位符就会被设置为SQL NULL。

属性:

<sql:param>标签具有如下属性:

属性 描述 是否必需 默认值
value 要设置的参数值 Body

实例:

现在编写JSP,使用<sql:update>标签来执行SQL DELETE语句来从表中删除一条id=3的记录,如下所示:

  1. <%@ page import="java.io.*,java.util.*,java.sql.*"%>
  2. <%@ page import="javax.servlet.http.*,javax.servlet.*" %>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
  5.  
  6. <html>
  7. <head>
  8. <title>JSTL sql:param Tag</title>
  9. </head>
  10. <body>
  11.  
  12. <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root" password="root"/>
  13.  
  14. <c:set var="id" value="3"/>
  15.  
  16. <sql:update dataSource="${snapshot}" var="count">
  17. DELETE FROM Student WHERE Id = ?
  18. <sql:param value="${id}" />
  19. </sql:update>
  20.  
  21. <sql:query dataSource="${snapshot}" var="result">
  22. SELECT * from Student;
  23. </sql:query>
  24.  
  25. <table border="1" width="100%">
  26. <tr>
  27. <th>ID</th>
  28. <th>Name</th>
  29. <th>Age</th>
  30. </tr>
  31. <c:forEach var="row" items="${result.rows}">
  32. <tr>
  33. <td><c:out value="${row.id}"/></td>
  34. <td><c:out value="${row.name}"/></td>
  35. <td><c:out value="${row.age}"/></td>
  36. </tr>
  37. </c:forEach>
  38. </table>
  39.  
  40. </body>
  41. </html>

现在尝试访问上述JSP,会显示如下所示的结果:

五、<sql:dateParam>

<sql:dateParam>标签用作<sql:query><sql:update>的嵌套操作,为值占位符提供日期和时间值。如果提供的是一个空值,那么该占位符的值就会被设置为SQL NULL。

属性:

<sql:dateParam>标签具有如下所示属性:

属性 描述 是否必需 默认值
value 要设置的日期参数的值(java.util.Date) Body
type 日期(只能是日期), 时间(只能是时间),或TIMESTAMP(日期和时间) TIMESTAMP

实例:

1、建表及添加模拟数据:

  1. create table Students2
  2. (
  3. id int not null,
  4. first varchar (255),
  5. last varchar (255),
  6. dob date
  7. );
  8. INSERT INTO Students2 VALUES (100, 'Zara', 'Ali', '2002/05/16');
  9. INSERT INTO Students2 VALUES (101, 'Mahnaz', 'Fatma', '1978/11/28');

现在编写JSP,将<sql:update>标签与<sql:param><sql:dataParam>标签一起使用来执行SQL UPDATE语句来更新:

  1. <%@ page import="java.io.*,java.util.*,java.sql.*"%>
  2. <%@ page import="javax.servlet.http.*,javax.servlet.*" %>
  3. <%@ page import="java.util.Date,java.text.*" %>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  5. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
  6.  
  7. <html>
  8. <head>
  9. <title>JSTL sql:dataParam Tag</title>
  10. </head>
  11. <body>
  12.  
  13. <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root" password="root"/>
  14.  
  15. <%
  16. Date DoB = new Date("2001/12/16");
  17. int studentId = 100;
  18. %>
  19.  
  20. <sql:update dataSource="${snapshot}" var="count">
  21. UPDATE Students2 SET dob = ? WHERE Id = ?
  22. <sql:dateParam value="<%=DoB%>" type="DATE" />
  23. <sql:param value="<%=studentId%>" />
  24. </sql:update>
  25.  
  26. <sql:query dataSource="${snapshot}" var="result">
  27. SELECT * from Students2;
  28. </sql:query>
  29.  
  30. <table border="1" width="100%">
  31. <tr>
  32. <th>Emp ID</th>
  33. <th>First Name</th>
  34. <th>Last Name</th>
  35. <th>DoB</th>
  36. </tr>
  37. <c:forEach var="row" items="${result.rows}">
  38. <tr>
  39. <td><c:out value="${row.id}"/></td>
  40. <td><c:out value="${row.first}"/></td>
  41. <td><c:out value="${row.last}"/></td>
  42. <td><c:out value="${row.dob}"/></td>
  43. </tr>
  44. </c:forEach>
  45. </table>
  46.  
  47. </body>
  48. </html>

现在尝试访问上述 JSP,会出现如下所示结果:

六、<sql:transaction>

注意:表类型应为InnoDB才支持事务。

<sql:transaction>标签用于将<sql:query><sql:update>标签分组到事物中。可以在<sql:transaction>标签中放入和语句一样多的<sql:query><sql:update>标签,使它们成为单独的事物。

如果任何嵌套操作抛出一个异常,它确保由嵌套操作执行的数据库修改要么提交要么回滚。

属性:

<sql:transaction>标签具有如下所示属性:

属性 描述 是否必需 默认值
dataSource 要使用的数据库连接(覆盖默认值) 默认数据库
isolation 事务隔离(READ_COMMITTED,READ_UNCOMMITTED,EPEATABLE_READ,或SERIALIZABLE) 数据库的默认值

实例:

现在编写JSP,使用<sql:update><sql:transaction>标签来执行SQL UPDATE语句。在这里<sql:transaction>标签内的代码要么被完全执行,要么一点也不执行(但经过测试,会只执行不会报错的SQL,所以还必须增加isolation属性,不过会抛出异常,此时需要使用异常标签进行包装处理):

  1. <%@ page import="java.io.*,java.util.*,java.sql.*"%>
  2. <%@ page import="javax.servlet.http.*,javax.servlet.*"%>
  3. <%@ page import="java.util.Date,java.text.*" %>
  4.  
  5. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  6. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
  7.  
  8. <html>
  9. <head>
  10. <title>JSTL sql:transaction Tag</title>
  11. </head>
  12. <body>
  13.  
  14. <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root" password="root"/>
  15.  
  16. <%
  17. Date DoB = new Date("2001/12/16");
  18. int studentId = 100;
  19. %>
  20.  
  21. <sql:transaction dataSource="${snapshot}">
  22. <sql:update var="count">
  23. UPDATE Students2 SET last = 'Ali' WHERE Id = 102
  24. </sql:update>
  25. <sql:update var="count">
  26. UPDATE Students2 SET last = 'Shah' WHERE Id = 103
  27. </sql:update>
  28. <sql:update var="count">
  29. INSERT INTO Students2
  30. VALUES (104,'Nuha', 'Ali', '2010/05/26');
  31. </sql:update>
  32. </sql:transaction>
  33.  
  34. <sql:query dataSource="${snapshot}" var="result">
  35. SELECT * from Students2;
  36. </sql:query>
  37.  
  38. <table border="1" width="100%">
  39. <tr>
  40. <th>Emp ID</th>
  41. <th>First Name</th>
  42. <th>Last Name</th>
  43. <th>DoB</th>
  44. </tr>
  45. <c:forEach var="row" items="${result.rows}">
  46. <tr>
  47. <td><c:out value="${row.id}"/></td>
  48. <td><c:out value="${row.first}"/></td>
  49. <td><c:out value="${row.last}"/></td>
  50. <td><c:out value="${row.dob}"/></td>
  51. </tr>
  52. </c:forEach>
  53. </table>
  54.  
  55. </body>
  56. </html>

现在尝试访问上述 JSP,会出现如下所示结果:

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

  1. 转: JSTL SQL标签库 使用

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

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

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

  3. JSTL SQL标签库 使用

    推荐博客:http://blog.sina.com.cn/s/blog_4f925fc30101820u.html 怕博主把原文删了,所以在这里先保存一下. SQL标签库 JSTL提供了与数据库相关操 ...

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

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

  5. (4)JSTL的SQL标签库

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

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

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

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

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

  8. JSTL标准标签库

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

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

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

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

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

随机推荐

  1. ios开发介绍

    iOS开发概述 •什么是IOS •什么是IOS开发 •为什么要选择IOS开发 •学习IOS开发的准备   1.什么是iOS   •iOS是一款由苹果公司开发的操作系统(OS是Operating Sys ...

  2. (转)淘淘商城系列——发布dubbo服务

    http://blog.csdn.net/yerenyuan_pku/article/details/72758639 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入, ...

  3. CE工具里自带的学习工具--第二关

    图解:

  4. Matrix (二分套二分

    Given a N × N matrix A, whose element in the i-th row and j-th column Aij is an number that equals i ...

  5. 03HibernateJAVA类与数据库表映射配置

    HibernateJAVA类与数据库表映射配置

  6. bash基础——管道符、通配符

    1.多命令顺序执行 多命令顺序执行 格式 作用 ; 命令1 ; 命令2 多个命令之间没有任何逻辑联系 && 命令1&&命令2 逻辑与 当命令1正确执行,则命令2才会执行 ...

  7. eclipse修改xml文件默认的打开方式为XML Editor

    1.菜单:Window   ->   Preferences   ->   General   ->   Editors   ->   File   Associations  ...

  8. python清除字符串中无用字符

    将列表val_list中包含的非法字符去掉,illegal_char是非法字符列表 def clear(): illegal_char = [' ','#','%','_','@'] tmp_list ...

  9. oracle学习链接

    http://www.cnblogs.com/huyong/category/646939.html

  10. vue 全局组件的注册

    第一步 在main.js里面 引入需要注册的组件例如: //引入组件 import header from  './components/header.vue' import footer from ...