SQL标签库提供了与关系型数据库进行交互的标签。

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

数据库:test

用户名:root

密码:123

项目中加入驱动jar包:mysql-connector-java-5.1.26-bin.jar

表:create table Employees

    (
id int not null,
age int not null,
first varchar (255),
last varchar (255),
   birth date//dateParam标签后增加的一列
);

数据:insert into Employees values(100, 18, 'Zara', 'Ali');

    insert into Employees values(101, 25, 'Mahnaz', 'Fatma');

   insert into Employees values(102, 30, 'Zaid', 'Khan');

   insert into Employees values(103, 28, 'Sumit', 'Mittal');

标签包括有:

标签 描述
<sql:setDataSource> 指定数据源
<sql:query> 运行SQL查询语句
<sql:update> 运行SQL更新语句
<sql:param> 将SQL语句中的参数设为指定值
<sql:dateParam> 将SQL语句中的日期参数设为指定的java.util.Date 对象值
<sql:transaction> 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

<sql:setDataSource> 指定数据源,用来配置数据源或者将数据源信息存储在某作用域的变量中,用来作为其他Jstl数据库操作的数据源。

属性:

属性 描述 是否必要 默认值
driver 要注册的JDBC驱动
url 数据库连接的JDBC URL
user 数据库用户名
password 数据库密码
dataSource 事先准备好的数据库
var 代表数据库的变量 默认设置
scope var属性的作用域 Page

eg:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"   pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<sql:setDataSource var="snapshot"
     driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"
user="root"
password="123" /> </body>
</html>

<sql:query>  用来运行select语言,并将结果存储在作用域变量中。

属性:

属性 描述 是否必要 默认值
sql 需要执行的SQL命令(返回一个ResultSet对象) Body
dataSource 所使用的数据库连接(覆盖默认值) 默认数据库
maxRows 存储在变量中的最大结果数 无穷大
startRow 开始记录的结果的行数 0
var 代表数据库的变量 默认设置
scope var属性的作用域 Page

eg:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"
user="root"
password="123" />
<sql:query dataSource="${snapshot}" var="result">
select * from Employees;
</sql:query>
<table border="1" width="100%">
<tr>
<th>Emp ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.first}" /></td>
<td><c:out value="${row.last}" /></td>
<td><c:out value="${row.age}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>

//结果输出为:

<sql:update> 用来执行一个没有返回值的SQL语句,如insert,update,delete。

语法:

属性 描述 是否必要 默认值
sql 需要执行的SQL命令(不返回ResultSet对象) Body
dataSource 所使用的数据库连接(覆盖默认值) 默认数据库
var 用来存储所影响行数的变量
scope var属性的作用域 Page

eg:

<%@ page language="java" contentType="text/html; charset=utf-8"   pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"
user="root"
password="123" />
<sql:query dataSource="${snapshot}" var="result">
select * from Employees;
</sql:query>
<table border="1" width="100%">
<tr>
<th>Emp ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.first}" /></td>
<td><c:out value="${row.last}" /></td>
<td><c:out value="${row.age}" /></td>
</tr>
</c:forEach>
</table>
<sql:update dataSource="${snapshot}" var="count">
insert into Employees values(104,2,'Nuha','Ali');
</sql:update>
<sql:query dataSource="${snapshot}" var="result">
select * from Employees;
</sql:query>
<p>增加一条信息后:</p>
<table border="1" width="100%">
<tr>
<th>Emp ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.first}" /></td>
<td><c:out value="${row.last}" /></td>
<td><c:out value="${row.age}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>

//结果输出为:

<sql:param> 提供值占位符,与上面两个标签签到使用。

语法:

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

eg:

<%@ page language="java" contentType="text/html; charset=utf-8"   pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"
user="root"
password="123" />
<c:set var="id" value="104" />
<p>查询id=104的人员信息:</p>
<sql:query dataSource="${snapshot}" var="result">
select * from Employees where id=?;
<sql:param value="${id}" />
</sql:query>
<table border="1" width="100%">
<tr>
<th>Emp ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.first}" /></td>
<td><c:out value="${row.last}" /></td>
<td><c:out value="${row.age}" /></td>
</tr>
</c:forEach>
</table> </body>
</html>

//结果输出为:

<sql:dateParam> 与<sql:param>用法一直只是提供的是日期和时间的占位符。

语法:

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

eg:

<%@ page language="java" contentType="text/html; charset=utf-8"   pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"
user="root"
password="123" /> <sql:query dataSource="${snapshot}" var="result">
select * from Employees ;
</sql:query>
<table border="1" width="100%">
<tr>
<th>Emp ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
<th>Birth</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.first}" /></td>
<td><c:out value="${row.last}" /></td>
<td><c:out value="${row.age}" /></td>
<td><c:out value="${row.birth}" /></td>
</tr>
</c:forEach>
</table>
<c:set var="id_new" value="102" />
<c:set var="birth_new" value="<%=new java.util.Date() %>" />
<sql:update dataSource="${snapshot}" var="count">
update Employees set birth=? where id=?;
<sql:dateParam type="DATE" value="${birth_new}" />
<sql:param value="${id_new}" />
</sql:update>
<sql:query dataSource="${snapshot}" var="result">
select * from Employees;
</sql:query>
<p>更改 id=102 的 birth:</p>
<table border="1" width="100%">
<tr>
<th>Emp ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
<th>Birth</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.first}" /></td>
<td><c:out value="${row.last}" /></td>
<td><c:out value="${row.age}" /></td>
<td><c:out value="${row.birth}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>

//结果输出为:

<sql:transaction> 事务处理,用来将<sql:query>和<sql:update>标签封装在事务中,使之成为单一事务,同时提交或回滚。

语法:

描述 是否必要 默认值
dataSource 所使用的数据库(覆盖默认值) 默认数据库
isolation 事务隔离等级 (READ_COMMITTED,,READ_UNCOMMITTED, REPEATABLE_READ或 SERIALIZABLE) 数据库默认

eg:

<%@ page language="java" contentType="text/html; charset=utf-8"   pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"
user="root"
password="123" /> <sql:query dataSource="${snapshot}" var="result">
select * from Employees ;
</sql:query>
<table border="1" width="100%">
<tr>
<th>Emp ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
<th>Birth</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.first}" /></td>
<td><c:out value="${row.last}" /></td>
<td><c:out value="${row.age}" /></td>
<td><c:out value="${row.birth}" /></td>
</tr>
</c:forEach>
</table>
<c:set var="id_new" value="102" />
<c:set var="birth_new" value="<%=new java.util.Date() %>" /> <sql:transaction dataSource="${snapshot}">
<sql:update var="count">
update Employees set birth=? where id=?;
<sql:dateParam type="DATE" value="${birth_new}" />
<sql:param value="${id_new}" />
</sql:update>
<sql:update var="count">
update Employees set last='Ali' where id=102;
</sql:update> <sql:update var="count">
insert into Employees values(104,2,'Nuha','Ali','2014/2/3');
</sql:update>
</sql:transaction> <sql:query dataSource="${snapshot}" var="result">
select * from Employees;
</sql:query>
<p>一次性事务执行后:</p>
<table border="1" width="100%">
<tr>
<th>Emp ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
<th>Birth</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}" /></td>
<td><c:out value="${row.first}" /></td>
<td><c:out value="${row.last}" /></td>
<td><c:out value="${row.age}" /></td>
<td><c:out value="${row.birth}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>

//结果输出为:

SQL标签的更多相关文章

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

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

  2. 转: JSTL SQL标签库 使用

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

  3. 夺命雷公狗---DEDECMS----18dedecms之无可奈何标签-sql标签取出今天更新

    我们在一些开发时候遇到普通标签都解决不了的问题的时候可以尝试下我们dedecms自带的sql标签,几乎可以完成任何的查询需求 语法如下所示: 我们在这里将刚才首页今天更新那块给改写下,原先的是: {d ...

  4. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法   动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...

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

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

  6. JSTL SQL标签库 使用

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

  7. 织梦SQL标签的使用

    (>=DedeCMS 3,DedeCMS 4,DedeCMS 5) 名称:sql 功能:用于获取MySQL数据库内容的标签 语法: 1 2 3 {dede:sql sql='' appname= ...

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

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

  9. mybatis动态sql中的sql标签——抽取可重用的sql片段

    1.用<sql>标签抽取可重用的sql片段 <!-- 抽取可重用的SQL片段,方便后面引用           1.sql抽取,经常将要查询的列名,或者插入用的列名,之后方便引用   ...

随机推荐

  1. 【Hihocoder】1014 : Trie树

    问题:http://hihocoder.com/problemset/problem/1014 给定一个字符串字典dict,输入字符串str, 要求从dict中找出所有以str为前缀的字符串个数. 构 ...

  2. Python之路(一)

    学了一整子python,目前看到了处理“列表”的地方,目前列表给我的感觉十分像数组,但不是java中的数组,更像是php中的数组. (1)创建列表的方法:列表名 = [列表项0,列表项1,······ ...

  3. jq最新前三篇文章高亮显示

    /*---------最新前三篇文章高亮显示-------------*/ function latest(){ var color_arr=new Array( "blue", ...

  4. thinkphp自定义分页效果

    TP自带了一个分页函数,挺方便使用的. 下面是我的使用方法: /*****************分页显示start*************************/ $arr_page=$this ...

  5. $_POST 变量以及$GLOBALS['HTTP_RAW_POST_DATA']

    $_POST 变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值. $_POST 变量用于收集来自 method="post" 的表单中的值.从带有 POST 方 ...

  6. 模拟状态为active的日志损坏的数据恢复实验(不完全恢复)

    1查看当前日志状态 首先不完全恢复是会丢失数据的,由此在当前打开的数据中我们创建一些测试数据,用来验证当我们进行完不完全恢复后该数据是否还存在. 2模拟删除CURRENT状态的日志 3启动数据验证错误 ...

  7. mysql view(视图)

    一,什么是视图 视图是存放数据的一个接口,也可以说是虚拟的表.这些数据可以是从一个或几个基本表(或视图)的数据.也可以是用户自已定义的数据.其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面 ...

  8. JavaScript入门篇 第二天(消息对话框+网页弹出)

    提问(prompt 消息对话框) prompt弹出消息对话框,通常用于询问一些需要与用户交互的信息.弹出消息对话框(包含一个确定按钮.取消按钮与一个文本输入框). 语法: prompt(str1, s ...

  9. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

  10. [办公自动化]一次制作、多场合多次使用的PPT

    面试或汇报总结时,你可能需要制作一份PPT来介绍自己.但是这些场合你不一定能讲完所有的内容. 你可以尝试分1分钟.3分钟.5分钟.10分钟的版本来准备. 使用同一份PPT. 没错. 在office20 ...