Android网络编程之一个Android下菜单系统模块的实现(服务器端—添单功能)

对于点菜来说,首先要有菜单,我们建立一张表menutbl来容纳所有菜品数据,此表结构如下:

 

为了具体记录每个订单点了什么菜,点多少,我们还需要建立一张表orderdetailtbl来实现,此表结构如下:

注:orderId与menuId为外键:orderId为ordertbl中的id字段,menuId为menutbl中的id字段

于是,在服务器端的编程大体与开桌功能相同:建立该表实体类 ---> 写其DAO接口 ---> 实现该接口,这里我们仍然沿用上次建立的OrderDao接口,只在其中新添加一个方法saveOrderDetail()即可。

WirelessServer中的com.moka.entity中建立orderdetailtbl表实体类:

/**
 *    用于封装OrderDetailTbl表的实体类
 */
public class OrderDetail {
    // 编号
    private int id;
    // 此细节单的主订单号
    private int orderId;
    // 菜品编号
    private int menuId;
    // 数量
    private int num;
    // 备注
    private String remark;
    
getters & setters ..
        
    
}    
View Code

 

在开桌功能篇写好的OrderDaoImpl中添加如下方法(要在接口OrderDao中定义):

@Override
    public void saveOrderDetail(OrderDetail orderDetail) {
        // jdbc连接数据库准备工作
        DBUtil util = new DBUtil(); 
        Connection conn = util.openConnection();
        
        // 插入数据库操作用
        String saveOrderSql = "insert into orderdetailtbl (orderId, menuId, num, remark) values (?, ?, ?, ?)";
        PreparedStatement ps = null;
        
        try {
            ps = conn.prepareStatement(saveOrderSql);
            ps.setInt(1, orderDetail.getOrderId());
            ps.setInt(2, orderDetail.getMenuId());
            ps.setInt(3, orderDetail.getNum());
            ps.setString(4, orderDetail.getRemark());
            ps.executeUpdate();
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (ps != null) {
                    ps.close();
                    ps = null;
                }
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
View Code

 

然后写一个新的OrderDetailServlet:

public class OrderDetailServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html");
        // 获取输出打印流
        PrintWriter pw = new PrintWriter(resp.getOutputStream());
        
        // 读取请求中的order数据
        String orderId = req.getParameter("orderId");
        String menuId = req.getParameter("menuId");
        String dishNum = req.getParameter("dishNum");
        String remark = req.getParameter("remark");
        
        // 将数据添加到一个OrderDetail表对象实例
        OrderDetail detail = new OrderDetail();
        detail.setOrderId(Integer.parseInt(orderId));
        detail.setMenuId(Integer.parseInt(menuId));
        detail.setNum(Integer.parseInt(dishNum));
        detail.setRemark(remark);
        
        // 定单数据存入MySQL端,更新对应桌号是否有人的状态,并获得返回的订单号传回客户端
        OrderDao orderDao = new OrderDaoImpl();
        orderDao.saveOrderDetail(detail);
        pw.print("Dishes added successfully");
        pw.flush();
        pw.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doGet(req, resp);
    }

}
View Code

最后注册servlet:

<servlet>
    <servlet-name>OrderDetailServlet</servlet-name>
    <servlet-class>com.moka.servlet.OrderDetailServlet</servlet-class>
</servlet>
     
<servlet-mapping>
    <servlet-name>OrderDetailServlet</servlet-name>
    <url-pattern>/servlet/OrderDetailServlet</url-pattern>
</servlet-mapping>

至此,此功能的服务器端搭建完毕,下篇讨论客户端的编写

posted @ 2013-05-15 17:40  来杯冰镇魔卡  阅读(335)  评论(0编辑  收藏  举报