zoukankan      html  css  js  c++  java
  • DBUtils和完善商城页面

    DBUtils:

        就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。

        DBUtils核心功能介绍:

          QueryRunner中提供对sql语句操作的API。

            ResultSetHandler接口,用于定义select操作后,怎样封装结果集。

            DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法。

        QueryRunner:

             update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作

              query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作.

        ResultSetHandler:

    ArrayHandler

    将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值

    ArrayListHandler

    将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。

    BeanHandler

    将结果集中第一条记录封装到一个指定的javaBean中。

    BeanListHandler

    将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中

    ColumnListHandler

    将结果集中指定的列的字段值,封装到一个List集合中

    ScalarHandler

    它是用于单数据。例如select count(*) from 表操作。

    MapHandler

    将结果集第一行封装到Map<String,Object>集合中,Key 列名, Value 该列数据

    MapListHandler

    将结果集每一行封装到List<Map<String,Object>>集合中,Key 列名, Value 该列数据,Map集合存储到List集合

          JavaBean就是一个类,在开发中常用封装数据。

          ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值

          ArrayListHandler:将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。

          BeanHandler :将结果集中第一条记录封装到一个指定的javaBean中。

          BeanListHandler :将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中

          ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合

          ScalarHandler:它是用于单数据。例如select count(*) from 表操作。

          

    package com.oracle.dao;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.ArrayHandler;
    import org.apache.commons.dbutils.handlers.ArrayListHandler;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    import org.apache.commons.dbutils.handlers.ColumnListHandler;
    import org.apache.commons.dbutils.handlers.ScalarHandler;
    import org.apache.taglibs.standard.lang.jstl.test.Bean1;
    
    import com.oracle.domain.Sort;
    import com.oracle.tools.JDBCUtils;
    import com.oracle.tools.MyDBUtils;
    
    public class SortDao {
    //新增分类
        public void add() throws SQLException{
            //获取链接对象
            Connection conn=JDBCUtils.getConn();
            //创建QueryRunner对象
            QueryRunner qr=new QueryRunner();
            String sql="insert into sort(sname,sdesc) values(?,?)";
            int row=qr.update(conn,sql,"手机","iphone12");
            System.out.println(row);
        }
    //删除分类
        public void delete() throws SQLException{
            Connection conn=JDBCUtils.getConn();
            //创建QueryRunner对象
            QueryRunner qr=new QueryRunner();
            String sql="delete from sort where sid=?";
            int row=qr.update(conn,sql,21);    
                System.out.println(row);    
        }
        //ArrayHandker
        public void get1() throws SQLException{
            Connection conn=JDBCUtils.getConn();
            //创建QueryRunner对象
            QueryRunner qr=new QueryRunner();
            String sql="select * from sort";
            Object obj[]=qr.query(conn,sql,new ArrayHandler());
            //遍历
            for(Object ob:obj){
                System.out.println(ob);
            }
        }
        //ArrayListHandler
        public void get2() throws SQLException{
            Connection conn=JDBCUtils.getConn();
            //创建QueryRunner对象
            QueryRunner qr=new QueryRunner();
            String sql="select * from sort";
            List<Object[]> list=qr.query(conn,sql,new ArrayListHandler());
            //遍历
            for(Object obj:list){
                System.out.print(obj+"");
            }
            System.out.println();
        }
        //BeanHandler
        public void get3() throws SQLException{
            Connection conn=JDBCUtils.getConn();
            //创建QueryRunner对象
            QueryRunner qr=new QueryRunner();
            String sql="select * from sort";
            Sort sort=qr.query(conn,sql,new BeanHandler<Sort>(Sort.class));
            System.out.println(sort);
        }
        //BeanListHandler
        public void get4() throws SQLException{
            Connection conn=JDBCUtils.getConn();
            //创建QueryRunner对象
            QueryRunner qr=new QueryRunner();
            String sql="select * from sort";
            List<Sort> list=qr.query(conn,sql,new BeanListHandler<Sort>(Sort.class));
            System.out.println(list);        
        }
        //ColumnListHandler
        public void get5() throws SQLException{
            Connection conn=JDBCUtils.getConn();
            //创建QueryRunner对象
            QueryRunner qr=new QueryRunner();
            String sql="select sname from sort";
            List<String> list=qr.query(conn,sql,new ColumnListHandler<String>());
            System.out.println(list);        
        }
        //ScalarHandler
        public void get6() throws SQLException{
            //创建QueryRunner对象
            QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());
            String sql="select count(*) from sort where sid=?";
            Long count=qr.query(sql,new ScalarHandler<Long>(),3);
            int c=count.intValue();
            System.out.println(c);        
        }
    }

    连接池技术:

        Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!

        常见的连接池:DBCP、C3P0。

        需要先导入2个jar包。

        

    package com.oracle.tools;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.apache.commons.dbcp.BasicDataSource;
    
    public class MyDBUtils {
        public static final String DRIVER = "com.mysql.jdbc.Driver";
        public static final String URL = "jdbc:mysql://localhost:3306/demo0803?characterEncoding=utf8";
        public static final String USERNAME = "root";
        public static final String PASSWORD = "123456";
        /*
         * 创建连接池BasicDataSource
         */
        public static BasicDataSource dataSource = new BasicDataSource();
        //静态代码块
        static {
            //对连接池对象 进行基本的配置
            dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
            dataSource.setUrl(URL); //指定要连接的数据库地址
            dataSource.setUsername(USERNAME); //指定要连接数据的用户名
            dataSource.setPassword(PASSWORD); //指定要连接数据的密码
        }
        /*
         * 返回连接池对象
         */
        public static DataSource getDataSource(){
            return dataSource;
        }
        //获取连接对象
        public static Connection getConn(){
            Connection conn=null;
            try {
                conn=dataSource.getConnection();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return conn;
        }
    }

        

          作用:自身维护了多个Connection连接对象维护

         BasicDataSource类  是  DataSource接口的实现类

         DataSource接口,它是java与每种数据库连接池 连接的规范标准

         DBCP连接池常见的配置:

            

    必须项

    driverClassName

    数据库驱动名称

    url

    数据库的地址

    username

    用户名

    password

    密码

    基本项

    maxActive

    最大连接数量

    initialSize

    连接池中初始化多少个Connection连接对象

    扩展项

    maxWait

    超时等待时间以毫秒为单位 1000等于1秒

    完善商城页面功能:

      

    package com.oracle.tools;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.apache.commons.dbcp.BasicDataSource;
    
    public class MyDBUtils {
        public static final String DRIVER = "com.mysql.jdbc.Driver";
        public static final String URL = "jdbc:mysql://localhost:3306/store_v1.0?characterEncoding=utf8";
        public static final String USERNAME = "root";
        public static final String PASSWORD = "123456";
        /*
         * 创建连接池BasicDataSource
         */
        public static BasicDataSource dataSource = new BasicDataSource();
        //静态代码块
        static {
            //对连接池对象 进行基本的配置
            dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
            dataSource.setUrl(URL); //指定要连接的数据库地址
            dataSource.setUsername(USERNAME); //指定要连接数据的用户名
            dataSource.setPassword(PASSWORD); //指定要连接数据的密码
        }
        /*
         * 返回连接池对象
         */
        public static DataSource getDataSource(){
            return dataSource;
        }
        //获取连接对象
        public static Connection getConn(){
            Connection conn=null;
            try {
                conn=dataSource.getConnection();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return conn;
        }
    }

    先找到head.jsp:

           超链接访问的应该是Servlet,项目名+Servlet.

              <li class="active"><a href="${pageContext.request.contextPath }/ProductListServlet">手机数码<span class="sr-only">(current)</span></a></li>

    写导层:

    建立实体类:

    package com.oracle.domain;
    
    import java.util.Date;
    
    public class Product {
        private String pid;
        private String pname;
        private Double market_price;
        private Double shop_price;
        private String pimage;
        private Date pdate;
        private Integer is_hot;
        private String pdesc;
        private Integer pflag;
        private String cid;
        public String getPid() {
            return pid;
        }
        public void setPid(String pid) {
            this.pid = pid;
        }
        public String getPname() {
            return pname;
        }
        public void setPname(String pname) {
            this.pname = pname;
        }
        public Double getMarket_price() {
            return market_price;
        }
        public void setMarket_price(Double market_price) {
            this.market_price = market_price;
        }
        public Double getShop_price() {
            return shop_price;
        }
        public void setShop_price(Double shop_price) {
            this.shop_price = shop_price;
        }
        public String getPimage() {
            return pimage;
        }
        public void setPimage(String pimage) {
            this.pimage = pimage;
        }
        public Date getPdate() {
            return pdate;
        }
        public void setPdate(Date pdate) {
            this.pdate = pdate;
        }
        public Integer getIs_hot() {
            return is_hot;
        }
        public void setIs_hot(Integer is_hot) {
            this.is_hot = is_hot;
        }
        public String getPdesc() {
            return pdesc;
        }
        public void setPdesc(String pdesc) {
            this.pdesc = pdesc;
        }
        public Integer getPflag() {
            return pflag;
        }
        public void setPflag(Integer pflag) {
            this.pflag = pflag;
        }
        public String getCid() {
            return cid;
        }
        public void setCid(String cid) {
            this.cid = cid;
        }
        @Override
        public String toString() {
            return "Product [pid=" + pid + ", pname=" + pname + ", market_price=" + market_price + ", shop_price="
                    + shop_price + ", pimage=" + pimage + ", pdate=" + pdate + ", is_hot=" + is_hot + ", pdesc=" + pdesc
                    + ", pflag=" + pflag + ", cid=" + cid + "]";
        }
        
    }

        

    public class ProductDao {
    //查询所有商品
        public List<Product> getProduct() throws SQLException{
            QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());
            String sql="select * from product";
            List<Product> list=qr.query(sql,new BeanListHandler<Product>(Product.class));
            return list;
        }
    }

    再写service层

      

    package com.oracle.service;
    
    import java.sql.SQLException;
    import java.util.List;
    
    import com.oracle.dao.ProductDao;
    import com.oracle.domain.Product;
    
    public class ProductService {
        ProductDao productDao=new ProductDao();
        public List<Product> getProduct(){
            List<Product> list=null;
            try {
                list=productDao.getProduct();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return list;
        }
    }

    在来servlet层:

        

    package com.oracle.web.product;
    
    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 com.oracle.domain.Product;
    import com.oracle.service.ProductService;
    
    public class ProductListServlet extends HttpServlet {
        ProductService productService=new ProductService();
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取所有商品
            List<Product> list=productService.getProduct();
            //放到request域中
            request.setAttribute("ProductList",list);
            //请求转发
            request.getRequestDispatcher("/product_list.jsp").forward(request, response);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    在来到product_list.jsp

        

    <c:forEach items="${ProductList }" var="pro">
    
    
            <div class="col-md-2" style="height:250px">
                <a href="product_info.htm"> <img src="${pro.pimage }"
                    width="170" height="170" style="display: inline-block;">
                </a>
                <p>
                    <a href="product_info.html" style='color: green'>${pro.pname }</a>
                </p>
                <p>
                    <font color="#FF0000">商城价:&yen;${pro.market_price }</font>
                </p>
            </div>
    </c:forEach>

    将内容遍历。

           

  • 相关阅读:
    太原市圆通快递网点
    快递单号查询小工具
    C#快递单号查询源码
    爱快递快递接口使用说明
    如何把网站及数据库部署到Windows Azure
    从window.console&&console.log(123)浅谈JS的且运算逻辑(&&)
    C# Enum 简易权限设计 使用FlagsAttribute属性
    Lambda 表达式(C# 编程指南)
    C# list使用方法
    SharePoint Server 2013介绍v2
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/14011541.html
Copyright © 2011-2022 走看看