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 .. }
在开桌功能篇写好的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(); } } }
然后写一个新的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); } }
最后注册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>
至此,此功能的服务器端搭建完毕,下篇讨论客户端的编写