Java进阶SQL函数、网页定时刷新与自定义JSTL函数

一、SQL函数

     能够在SQL语句中调用的函数(方法) ,用来实现一些小功能

 

聚合函数

能够把多行数据聚合成一个值(统计)

 

count()    计数,计算数据条数

max()      计算最大值

main()     计算最小值

avg()      计算平均值

sum()     计算总和

Group_cancat   ,  连接多个数据  

运行实例 SELECT  GROUP_CONCAT(name) FROM goods  如图

 

数学函数

字符串函数

    concat(str1,str2,str3,.....)

    concat_ws(分隔符,str1,str2,str3,.....)使用分隔符连接多个字符串

    注意:如果连接数据不是字符串类型,则有可能在低版本的Mysql中产生乱码

    解决的方法时使用Convert(列名,char)函数将非字符串数据转换成字符串

    left(str1,n)    取前n个字符

    right(str1,n)   取后n个字符

    substring(str1,p,n)   截取子字符串,p开始位置,从1开始,n表示个数

 

子查询

  语法: select .....,(select....from 表名 where 条件)列别名  from表名

 

通过子查询可以避免多次查询数据库,从而提高性能

 

实例:

SELECT

o.*,

(SELECT GROUP_CONCAT(CONCAT_WS('*',g.`name`,oi.count)) from order_item  oi

LEFT JOIN goods g ON oi.goods_id = g.goods_id

WHERE oi.order_id = o.order_id) order_item

from `order` o

 


日期时间函数

其他函数


二、实现网页定时刷新

   方法1通过JS的定时器实现

 

setTimeout(function(){

    Location.reload();    //刷新当前页面

},60*1000)

setTimeout的第一个参数是一个函数,它在时间到达时执行!

            第二个参数指定到达时间,单位是毫秒ms

 

  方法2通过meta标签实现

   <meta name = http-equiv=reflesh  content =60>

60秒刷新页面

 

使用场景

   图文直播、数据实时展示(股票、天气、时间、倒计时)

 

三、JSTLSET标签

    <c:set var = “要赋值的变量名” vlaue=”要赋的值” scope=”变量的作用域” />

 

JSTL的四大作用域(scope的取值范围)

  request  表示一次请求,作用时间(从接到请求到发出响应,几ms

session   表示一次会话,从“登录”《只要Session启用就算》到退出,作用时间(几分钟到几十分钟)  

page     表示一个Servlet对象(虽然存在的时间很长,但是不能跨页面)

application  表示一个应用(从应用创建到关闭,全局可用-----即跨页面----作用范围最广)

 

jQuery

   $(“#photo”)

   相当于调用了jQuery对象的构造函数,创建一个jQuery对象

$===jQuery  所有上面的代码相当于jQuery(“#photo”)

jQuery是一个函数,并且是一个构造函数

 

jQuery对象是一个容器,相当于java中的list

在这个容器中可以包含多个HTML标签对象

 

$(筛选器).change(func);     变化事件

  $(筛选器).click(func);        点击事件

  当事件发生时,会调用func函数---------事件驱动编程

 

jQuery 会监听容器中所有标签元素的事件

 

四、JS中的Console对象

   用来向浏览器的控制台输出日志,类似于Java中的Logger对象

   也支持分级输出日志

   console.error()

   console.warn()

   console.info()

   console.log()

   console.debug()

 

五、如何自定义JSTL函数

  1.创建一个类,在类中创建静态方法,通常需要返回String类型,目的是向页面输出内容

A)也有返回intbooleanString[]数组的情况,通常是传给JSTL标签使用(函数是在JSTL标签的属性中使用的、嵌套)

实例演示:如图创建了一个ZYTLFunction的类

 

 

  2.创建---tld文件,这个文件通常放在WEB-INF中,名字通常包含版本号。

A) zytl-fn-1_0.tld

实例演示:创建zytl-fn-1_0.tld随机获取列表中的项(1_0代表是1.0版本)

 

B) 一个tld文件中通常定义同一类别的多个标签或函数(标签和函数分开到不同文件中定义)

   C)一个tld(标签库定义文件)会有一个唯一URL(可以随意编写)和前缀与之关联

   D)创建tld的时候,最简单的方法,也是最后的方法:从JSTL官方jar包中拆出来一个进行修改,而不要自己写。

 

3.web.xml中通过<jsp-config>下的<taglib>注册一下tld,如果不注册会出现tld既不在jar中,也不在web.xml中的错误提示

实例演示:如图在web.xml中的配置

 

4.jsp文件中的声明与使用

实例演示:如图具体的使用

 

 

对一门技能掌握程度:

了------用-------熟-------精-------专

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>动漫搜索</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript"> var xmlhttp; function loadXMLDoc(url,cfun) { // alert("hadhfaf"); xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=cfun; xmlhttp.open("GET",url,true); xmlhttp.send(); } function myfunction(id,times) { //alert("123"); loadXMLDoc("open.jsp?id="+id+"&times="+times+"&t="+Math.random(),function() { //alert(xmlhttp.status); if(xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById(id).innerHTML=xmlhttp.responseText; } }); } </script> <% //currentPage当前显示页数 if (request.getParameter("currentPage") == null||request.getParameter("currentPage").equals("")) { pageContext.setAttribute("currentPage", new Integer(0)); } else { pageContext.setAttribute("currentPage", request .getParameter("currentPage")); } %> <sql:query var="rs" dataSource="jdbc/mysql"> select* from anime </sql:query> <!-- 得到所有记录数 --> <c:set var="resultNum"> <jsp:getProperty name="rs" property="rowCount" /> </c:set> <!-- 每页显示记录数 --> <c:set var="PerPageNum" value="3" /> </head> <style type="text/css"> body{background-color:} </style> <body> <% int perPageNum = Integer.parseInt((String) pageContext .getAttribute("PerPageNum")); int resultNum = Integer.parseInt((String) pageContext .getAttribute("resultNum")); int pageNum; //如果所有记录数除每页显示记录数没有余数-1 if((int)resultNum%perPageNum==0) pageNum = (int)(resultNum / perPageNum-1); else pageNum = (int)(resultNum / perPageNum); pageContext.setAttribute("pageNum", pageNum); %> <div style="border:1px solid #cccccc; width:1100px;margin:100px 0 0 90px"> <table style=" width:1100px;"> <tr> <td>序号</td> <td>热搜动漫</td> <td>动漫简介</td> <td>更新集数</td> <td>搜索指数</td> <td>动漫详情</td> </tr> <c:if test="${currentPage lt 0 }"><!-- 当前显示页小于0 --> <c:set var="currentPage" value="0"></c:set> </c:if> <c:if test="${currentPage gt pageNum}"><!-- 当前显示页大于总页数 --> <c:set var="currentPage" value="${pageNum }"></c:set> </c:if> <c:set var="currentPage" value="${currentPage}" scope="session" /> <!-- 循环查找记录 --> <c:forEach var="row" items="${rs.rows}" begin="${currentPage*PerPageNum}" end="${PerPageNum+currentPage*PerPageNum-1}" > <tr> <td> ${row.id }</td> <td> <img src="image/${row.image}" width="50" height="50"/></td> <td style="width:600"> ${row.introduce}</td> <td> ${row.blues} </td> <td> ${row.times }</td> <c:set var="times" value="${row.times }" scope="session" /> <td> <input type="button" value="展开" onclick="myfunction(${row.id },${row.times })"/> </td> </tr> <tr> <td colspan=6 id="${row.id}"></td> </tr> </c:forEach> </table> <div style="margin:0px 0px 0px 800px"> 总共有${pageNum+1}页-第${currentPage+1}页-<a href="index.jsp?currentPage=${currentPage-1}">上一页</a> - <a href="index.jsp?currentPage=${currentPage+1}">下一页</a> </div> </div> </body> </html>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值