当只是查询某一张表的时候,如果想要显示在页面上,但是查询的结果多的话,就涉及到分页查询
也就是:
String sql="select * from person_info limit ?,?";
但是:
如果查询的是多张表,把各张表中需要的数据混合在一起放在一个集合里面,然后在页面上显示的时候,上面方法视乎不管用了;
我们可以利用
<c:forEach items="${list}" var="i" varStatus="j" begin="${begin }" end="${end}" step="1">
</c:forEach>
begin是循环集合的开始索引
end 是循环集合的长度
step是一步一步的迭代
以下是jsp 利用c标签的begin end 属性进行分页查询的代码
思路:
1.BMI_Servlet
1.1查询多张表:
例如需要A表中的第一列,B表中的第二列,C表中的第三列,把需要的这些数据用info封装起来
1.2新建一个封装类info;
1.3new一个info类型的集合,把以上数据添加到集合里面
1.4、把集合传递到BMI_During这个servlet里面
2.BMI_During
这个判断下一页、上一页的 调转到jsp页面的
3.jsp页面
jsp页面的begin 和 end都是变量
例子说明:
我要查询yh表中的number、xl、lpower、upower,根据yh表中的info查询person_info表中的name;
把name、 number、xl、lpower、upower,封装在一个类StringSeven里面
然后再把StringSeven添加到集合里面;
在页面上5条5条的显示内容
BMI_Servlet代码如下:
package cn.com.servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.com.jdbc.JdbcUtils_DBCP;
import cn.com.pack.StringSeven;
public class BMI_Servlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//第一阶段
//查询数据库里面有的心率血压指标
//查询数据库有心率血压而且不重复的编号,
String sql="SELECT DISTINCT number FROM yh WHERE xl<>'255' AND xl<>'0' AND lpower<>'255'";
//使用连接
//初始化
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
List<String> list=new ArrayList<String>();
//分页查询
int cp=0;
int count_page=0;
try {
//与数据库建立连接
conn=JdbcUtils_DBCP.getConnection();
st=conn.prepareStatement(sql);
rs=st.executeQuery();
//把结果集放在一个集合里面,因为涉及多个rs的时候尤其是彼此之间有关联,最好分开,以免出错导致连接不能释放,数据库连接数满
while(rs.next()){
cp++;
String number=rs.getString(1);
list.add(number);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭连接
JdbcUtils_DBCP.release(conn, st, rs);
}
//第二阶段
//根据num查询心率血压
//使用连接
//初始化
Connection conn1=null;
PreparedStatement st1=null;
ResultSet rs1=null;
//初始化
Connection conn2=null;
PreparedStatement st2=null;
ResultSet rs2=null;
String name=null;
String xl=null;
String lpower=null;
String upower=null;
String time=null;
List<StringSeven> String_sex=new ArrayList<StringSeven>();
for (String i : list) {
String sql1="SELECT * FROM yh WHERE number='"+i+"' AND xl<>'255' AND xl<>'0' AND lpower<>'255' ORDER BY TIME DESC LIMIT 1";
//如果到了最后一页的时候,
//与数据库建立连接
try {
conn1=JdbcUtils_DBCP.getConnection();
st1=conn1.prepareStatement(sql1);
rs1=st1.executeQuery();
while(rs1.next()){
xl=rs1.getString(3);
lpower=rs1.getString(4);
upower=rs1.getString(5);
time=rs1.getString(8);
//注意给numbet添加0
if(i.length()==1){
i="000"+i;
}else if(i.length()==2){
i="00"+i;
}else if(i.length()==3){
i="0"+i;
}
//根据编号查询名称
String sqls="select name from person_info where number='"+i+"'";
conn2=JdbcUtils_DBCP.getConnection();
st2=conn2.prepareStatement(sqls);
rs2=st2.executeQuery();
if(rs2.next()){
name=rs2.getString(1);
}
}
StringSeven sex=new StringSeven(name, i, xl, lpower, upower, time);
String_sex.add(sex);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JdbcUtils_DBCP.release(conn2, st2, rs2);
JdbcUtils_DBCP.release(conn1, st1, rs1);
}
}
//最后一个阶段 封装 跳转界面
count_page=(cp/5)+1;
HttpSession session =request.getSession();
session.setAttribute("list", String_sex);
session.setAttribute("count_page", count_page);
session.setAttribute("cp", cp);
response.sendRedirect("/Socket/BMI_During");
}
}
BMI_During代码如下:
package cn.com.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.com.pack.StringSeven;
public class BMI_During extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取集合
HttpSession session =request.getSession();
@SuppressWarnings("unchecked")
List<StringSeven> list=(List<StringSeven>) session.getAttribute("list");
session.setAttribute("list", list);
//获取总页数
int count_page=(int) session.getAttribute("count_page");
//获取数据的条数
int cp=(int) session.getAttribute("cp");
int end =0;
System.out.println("count_page:"+count_page);
System.out.println(cp);
String begin=request.getParameter("begin");
if(begin==null){
begin="0";
}else{
int b=Integer.parseInt(begin);
end=b+4;
if(b<=0){
begin="0";
end=4;
}
if(end>cp){
end=end-cp;
}
if(end<=cp){
end=b+4;
}
if(end<0){
begin="0";
end=4;
}
}
request.setAttribute("begin", begin);
request.setAttribute("end", end);
request.getRequestDispatcher("Scheduling.jsp").forward(request, response);
}
}
jsp页面如下:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!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">
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<link rel="stylesheet" type="text/css" href="css/index.css">
<link rel="stylesheet" type="text/css" href="css/Personnel_definition.css">
<script type="text/javascript">
function hide(){
var id=document.getElementById("center_img");
var name=id.getAttribute("name");
var left=document.getElementById("center-left");
if(name=="block"){
left.setAttribute("style", "display:none;");
id.setAttribute("name", "none");
}if(name=="none"){
left.setAttribute("style", "display:block;");
id.setAttribute("name", "block");
}
}
function display(a){
var elements=[];
//获得所有的li标签
var list=document.getElementsByTagName("li");
var len=list.length;//获得长度
//把class=sub-menu的li都放在集合里面
for(var i=0;i<len;i++){
if(list[i].className== "sub-menu"){
elements[elements.length]=list[i];
}
}
/*把所有的隐藏 */
for(var i=0;i<elements.length;i++){
//获得下面的ul
var ul=elements[i].childNodes[3];
/* 设置属性为隐藏 */
ul.setAttribute("style","display:none");
/* 点击当前元素的Ul设置可见 */
}
/* 对所有的input背景颜色设置 */
var tree=document.getElementsByName("tree");
for(var i=0;i<tree.length;i++){
tree[i].setAttribute("style", "background-color:#E1F1FD;");
}
var input=document.getElementById(a);
input.setAttribute("style", "background-color:#5094D6;");
var ula=input.parentNode;
var lla=ula.childNodes;
for(var i=0;i<lla.length;i++){
if(lla[i].nodeName=='UL'){
lla[i].setAttribute("style","display:block");
}
}
}
/*获取当前的日期和时间 */
function tm(){
var today = new Date();
var year=today.getFullYear();
var month=today.getMonth()+1;
var day=today.getDay();
var tm=year+"年"+month+"月"+day+"日"+" "+today.getHours() + ":"
+ today.getMinutes() + ":" + today.getSeconds(); ;
var rq=document.getElementById("rq");
rq.innerHTML=tm;
}
</script>
<script type="text/javascript">
function checktime() {
var stime=document.getElementById("stime").value;
var etime=document.getElementById("etime").value;
var submit=document.getElementById("submit");
if(stime!=null&&etime!=null&&stime!=""&&etime!=""){
submit.setAttribute("type","submit");
document.getElementById("error_info").innerHTML="";
}else{
submit.setAttribute("type","button");
document.getElementById("error_info").innerHTML="开始时间和结束时间不能为空";
}
}
</script>
</head>
<body onload="tm();">
<jsp:include page="common.jsp" />
<div id="center-right">
<!-- 人员信息界面-->
<form action="/Socket/Attendance_Search" method="post">
<br>
</form>
<br>
<div id="peo_info">
<table style="width: 80%;" id="tab">
<tr><td>编号</td><td>姓名</td><td>心率</td><td>低压</td><td>高压</td><td>时间</td></tr>
<c:forEach items="${list}" var="i" varStatus="j" begin="${begin }" end="${end}" step="1">
<tr><td>${i.num}</td><td>${i.name}</td><td>${i.sbs}</td><td>${i.stime}</td><td>${i.ebs}</td><td>${i.etime}</td></tr>
</c:forEach>
<tr><td colspan="2"><a href="/Socket/BMI_During?begin=${begin-5 }">上一页</a></td><td colspan="2">第${cpage}页</td><td colspan="2"><a href="/Socket/BMI_During?begin=${begin+5 }">下一页</a></td></tr>
</table>
</div>
</div>
<!-- 遍历数据库里面的集合-->
</div>
<!--下 -->
<div id="bottom">
诚信安天下-------铜陵力凡有限责任公司
</div>
</body>
<style>
#peo_info{
background-color:#e2e7ea;
width:88%;
height: 78%;
position: relative;
margin-left: 23px;
padding-top: 35px;
}
#tab{
border-spacing:5px;
font-size: 12px;
border: 2px solid white;
border-collapse:collapse;
margin-left: 9%;
background-color: #0f1059;
color: white;
}
#tab td{
width: 5%;
text-align: center;
border-bottom: 1px solid white;
border-right:1px solid white;
}
</style>
<script type="text/javascript">
var my=document.getElementById("tjn");
//1:拿到select对象:
//2:拿到选中项的索引:
var index=my.selectedIndex ; // selectedIndex代表的是你所选中项的index
//3:拿到选中项options的value:
var ss=my.options[index].text;
document.getElementById("part").value=ss;
</script>
</html>
效果如下: