zoukankan      html  css  js  c++  java
  • JSP 基于Oracle分页

    booklist.jsp

    <%@page import="books.accp.utils.Pager"%>
    <%@page import="books.accp.entities.Book"%>
    <%@page import="java.util.List"%>
    <%@page import="books.accp.bizImpl.BooksMangerImpl"%>
    <%@page import="books.accp.biz.BooksManager"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%
        BooksManager manager = new BooksMangerImpl();
        int pageindex = 1;
        if (request.getParameter("pageindex") != null)
            pageindex = Integer.parseInt(request.getParameter("pageindex"));
        Pager pager = new Pager();
        pager.setTotalCount(manager.GetBookCount());
        pager.setPageSize(3);
        pager.setPageIndex(pageindex);
        pager.getPageCount();
    
        List<Book> list = manager.GetBookListByPage(pager);
        request.setAttribute("list", list);
        request.setAttribute("pager", pager);
    %>
    <!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=UTF-8">
    <title>书籍列表</title>
    </head>
    <body>
        <table>
            <tr>
                <th>编号</th>
                <th>书名</th>
                <th>价格</th>
                <th>图片</th>
                <th>库存</th>
            </tr>
            <c:forEach var="book" items="${list}">
                <tr>
                    <td>${book.bid }</td>
                    <td><a href="bookinfo.aspx?bid=${book.bid}">${book.bookName }</a></td>
                    <td>${book.b_price }</td>
                    <td><img src="${image}" /></td>
                    <td>${book.stock }</td>
                </tr>
            </c:forEach>
        </table>
         <%@ include file="../utils/pager.jsp"%>
    <%--     <jsp:include page="../utils/pager.jsp"></jsp:include> --%>
    </body>
    </html>

    抽取出来的pager.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <style type="text/css">
    .txtgo {
        width: 30px;
        border: 1px solid;
    }
    </style>
    
    <script type="text/javascript">
        function goPage(pageindex) {        
            document.getElementById("pageindex").value = pageindex;
            document.forms[0].submit();
        }
        
        function jumpTo(){
            var pageindex = document.getElementById("pageindex").value;
             var regexp=/^d+$/;
            if(!regexp.test(pageindex)){
                alert("请输入正确的数字!");
                return false;
            }else{
                goPage(pageindex);
            }          
        }
    </script>
    <form name="frmpage" method="post">
        <div id="pager">
            <c:if test="${pager.pageIndex > 1 }">
                <a href="#" onclick="goPage(1)">首页</a>
                <a href="#" onclick="goPage(${ pager.pageIndex - 1 })">上一页</a>
            </c:if>
            <c:if test="${pager.pageIndex < pager.pageCount }">
                <a href="#" onclick="goPage(${ pager.pageIndex + 1 })">下一页</a>
                <a href="#" onclick="goPage(${ pager.pageCount})">末页</a>
            </c:if>
            <input type="text" id="pageindex" name="pageindex"
                value="${param.pageindex == null ? 1 : param.pageindex}"
                class="txtgo" /> <input type="button" value="go" onclick="jumpTo()">
        </div>
    </form>

    公共分页类:pager.java

    package books.accp.utils;
    
    public class Pager {
    
        //当前页
        private int pageIndex = 1;
        //页大小
        private int pageSize = 3;
        //总记录数
        private int totalCount = 0;
        //总页数
        private int pageCount = 0;
    
        public int getPageIndex() {
            return pageIndex;
        }
    
        public void setPageIndex(int pageIndex) {
            this.pageIndex = pageIndex;
        }
    
        public int getPageSize() {
            return pageSize;
        }
    
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
    
        public int getTotalCount() {
            return totalCount;
        }
    
        public void setTotalCount(int totalCount) {
            this.totalCount = totalCount;
        }
    
        /**
         * 获取总页数
         * 
         * @return
         */
        public int getPageCount() {
            pageCount = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount
                    / pageSize + 1;
            return pageCount;
        }
    
        /**
         * 获取开始记录数
         * 
         * @return
         */
        public int getStartRow() {
            return (pageIndex - 1) * pageSize + 1;
        }
    
        /**
         * 获取结束记录数
         * @return
         */
        public int getEndRow() {
            return pageIndex * pageSize;
        }
    
    }

    数据访问层:BookDaoImpl.java

    package books.accp.daoImpl;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import books.accp.dao.BaseDao;
    import books.accp.dao.BooksDao;
    import books.accp.entities.Book;
    import books.accp.utils.Pager;
    
    public class BooksDaoImpl extends BaseDao implements BooksDao {
    
        @Override
        public List<Book> GetBookList() {
            String sql = "select * from Books";
            ResultSet rs = ExecuteQuery(sql, null);
            List<Book> list = GetResultSetToList(rs);
            return list;
        }
    
        @Override
        public int GetBookCount() {
            String sql = "select count(*) from Books";
            Object obj = ExecuteScanlar(sql, null);
            int count = obj == null ? 0 : Integer.parseInt(obj.toString());
            return count;
        }
    
        @Override
        public List<Book> GetBookListByPage(Pager pager) {
            String sql = "SELECT * FROM (SELECT Books.*,ROWNUM AS rn FROM Books) WHERE rn >= ? AND rn <= ?";
            Object[] paras = new Object[2];
            paras[0] = pager.getStartRow();
            paras[1] = pager.getEndRow();
            ResultSet rs = ExecuteQuery(sql, paras);
            List<Book> list = this.GetResultSetToList(rs);
            return list;
        }
    
        public List<Book> GetResultSetToList(ResultSet rs) {
            List<Book> list = new ArrayList<Book>();
            try {
                while (rs.next()) {
                    Book b = new Book();
                    b.setBid(rs.getInt("bid"));
                    b.setBookName(rs.getString("bookname"));
                    b.setB_price(rs.getDouble("B_price"));
                    b.setImage(rs.getString("Image"));
                    b.setStock(rs.getInt("Stock"));
                    list.add(b);
                }
                return list;
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                CloseAll(rs);
            }
            return null;
        }
    }

    数据访问接口:BooksDao.java

    package books.accp.dao;
    
    import java.sql.ResultSet;
    import java.util.List;
    
    import books.accp.entities.Book;
    import books.accp.utils.Pager;
    
    public interface BooksDao{
        public List<Book> GetBookList();
        
        public int GetBookCount();
        
        public List<Book> GetResultSetToList(ResultSet rs);
        
        public List<Book> GetBookListByPage(Pager pager);
    }

    BaseDao.java

    package books.accp.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.sql.DataSource;
    
    public class BaseDao {
        private static String jdbcname = "java:comp/env/jdbc/books";
        private static Connection con;
        private static PreparedStatement stmt;
    
        /**
         * 关闭jdbc对象
         * 
         * @param rs
         */
        public static void CloseAll(ResultSet rs) {
            // 关闭操作对象
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 创建连接对象
         * 
         * @return
         */
        private static Connection CreateConnection() {
            // 通过连接池创建Connection对象,一定是基于Tomcat的应用,连接池是由Tomcat进行管理
            Context context;
            try {
                context = new InitialContext();
                DataSource ds = (DataSource) context.lookup(jdbcname);
                con = ds.getConnection();
                return con;
            } catch (NamingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 为PreparedStatement添加参数
         * 
         * @param stmt
         * @param paras
         */
        private static void AddPararents(PreparedStatement stmt, Object[] paras) {
            try {
                if (paras != null && paras.length > 0) {
                    for (int i = 0; i < paras.length; i++) {
                        stmt.setObject(i + 1, paras[i]);
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 执行查询的方法
         * 这里不能关闭ResultSet,因为是ResultSet是一个游标,必须保持数据库的打开状态
         * @param 要执行的sql语句
         * @param sql语句执行的参数
         * @return
         */
        public static ResultSet ExecuteQuery(String sql, Object[] paras) {
            ResultSet rs = null;
            try {
                con = CreateConnection();
    
                stmt = con.prepareStatement(sql);
    
                AddPararents(stmt, paras);
                // 执行查询操作,返回ResultSet对象
                rs = stmt.executeQuery();
                return rs;
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 返回首行首列
         * 
         * @param sql
         * @param paras
         * @return
         */
        public static Object ExecuteScanlar(String sql, Object[] paras) {
            ResultSet rs = null;
            try {
                con = CreateConnection();
                stmt = con.prepareStatement(sql);
                AddPararents(stmt, paras);
                // 执行查询操作,返回ResultSet对象
                rs = stmt.executeQuery();
                if (rs != null && rs.next()) {
                    return rs.getObject(1);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                CloseAll(rs);
            }
            return null;
        }
    
        /**
         * 执行增加、修改、删除的方法
         * 
         * @param sql
         * @param paras
         * @return
         */
        public static int ExecuteUpdate(String sql, Object[] paras) {
            try {
                con = CreateConnection();
                stmt = con.prepareStatement(sql);
                AddPararents(stmt, paras);
                // 执行查询操作,返回ResultSet对象
                int result = stmt.executeUpdate();
                return result;
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                CloseAll(null);
            }
            return -1;
        }
    }

    连接池:

    <Resource name="jdbc/books" auth="Container" type="javax.sql.DataSource"
            maxActive="100" maxIdle="30" maxWait="10000" username="bookuser" password="bookuser"
            driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:localhost:1521:orcl" />

    SQL表:

    create table BOOKS
    (
      BID      NUMBER not null,
      BOOKNAME VARCHAR2(100) not null,
      B_PRICE  VARCHAR2(10) not null,
      IMAGE    VARCHAR2(200) not null,
      STOCK    NUMBER not null
    )
    ;
    alter table BOOKS
      add constraint PK_BOOKID primary key (BID);
    
    prompt Loading BOOKS...
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (27, '泰戈尔诗集', '18.00', 'images/book/book_01.gif', 979);
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (28, '痕记', '22.80', 'images/book/book_02.gif', 977);
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (29, '天堂之旅', '25.00', 'images/book/book_03.gif', 989);
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (30, '钱钟书集', '332.50', 'images/book/book_04.gif', 999);
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (31, '赵俪生高昭—夫妻回忆录', '38.00', 'images/book/book_05.gif', 998);
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (32, '无聊斋', '28.00', 'images/book/book_06.gif', 998);
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (33, '一颗热土豆是一张温馨的床', '38.00', 'images/book/book_07.gif', 999);
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (34, '李戡戡乱记', '22.00', 'images/book/book_08.gif', 999);
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (35, '生生世世未了缘', '17.50', 'images/book/book_09.gif', 999);
    insert into BOOKS (BID, BOOKNAME, B_PRICE, IMAGE, STOCK)
    values (36, '一生有多少爱', '17.50', 'images/book/book_10.gif', 999);

    源代码

  • 相关阅读:
    Java1.4从BIO模型发展到NIO模型
    Java Socket TCP 套接字超时
    浅谈 Java Socket 构造函数参数 backlog
    Java Socket 的BIO模型(以TCP为例)
    TCP三次握手和四次挥手与Java Socket
    TCP报文格式
    Windows安装Wireshark实现127.0.0.1抓包
    NIO入门之多路复用选择器Selector
    晚安西南-----拆装死绳传感器
    晚安西南-----螺扶与拖压
  • 原文地址:https://www.cnblogs.com/zhengcheng/p/4542077.html
Copyright © 2011-2022 走看看