关于从数据库连接池中获取链接后的关闭问题

数据库连接池中关闭连接其实就是把连接归还给数据库连接池当中
1、不管是否出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
代码片段:

 public String CreatOrder(Cart cart, Integer userId) {
        Connection conn=null;
        String orderId=null;
        try {
            conn= DButil.getConnection();

        //每次生成一个订单就会同时生成一个商品项同一个id

        //订单号是唯一的:时间戳+userId
        orderId=System.currentTimeMillis()+""+userId;
        //生成一个订单对象
        Order order =new Order(orderId,new Date(),cart.getTotalPrice(),0,userId);
        //订单保存在数据库中
        orderDao.saveOrder(conn,order);

        //遍历购物车中每一个商品项转化为订单项
        for (Map.Entry<Integer, CartItem>entry: cart.getItems().entrySet()){

            CartItem cartItem =entry.getValue();//拿到每一个商品项
            OrderItem orderItem =new OrderItem(null,cartItem.getName(),cartItem.getCount(),cartItem.getPrice(),cartItem.getTotalPrice(),orderId);
            orderItemDao.saveOrderItem(conn,orderItem);

          Book book = bookDao.queryBookById(conn,cartItem.getId());
          book.setSales(book.getSales()+cartItem.getCount());
          book.setStock(book.getStock()-cartItem.getCount());
          bookDao.updateBook(conn,book);
        }
        cart.clear();
        return orderId;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
        //此时关闭连接,
            DButil.close(conn,null);
        }
        return orderId;
    }
posted @ 2020-11-23 13:30  爪洼ing  阅读(127)  评论(0编辑  收藏  举报