Android网络编程之一个Android下菜单系统模块的实现(服务器端—开桌功能))
为了实现顾客下单的功能,需要在MySQL数据库的中设置一张表:ordertbl
然后在服务器端的Wireless项目下的com.moka.entity包中新建一个此表的对象类Order,就像登录部分的User一样:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/** * 用于封装OrderTbl表的实体类 */ public class Order { // 此订单编号 private int id; // 下单时间 private String orderTime; // 操作用户id private int userId; // 开桌台号 private int tableId; // 此桌人数 private int personNum; // 结算否 private int isPay; // 备注 private String remark; // getters & setters .. 省略
同样,在对应包中建立对于ordertbl表的数据访问对象OrderDao与OrderDaoImpl,他们封装了所有对ordertbl的数据操作:
public interface OrderDao { // 保存开桌信息 public int saveOrder(Order order); // 保存菜表信息 public void saveOrderDetail(OrderDetail orderDetail); // 更新桌号状态, 有人 public void updateTableStatus(int tableId); // 更新桌号状态, 空位 public void updateTableStatus2(int orderId); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class OrderDaoImpl implements OrderDao { @Override public int saveOrder(Order order) { // jdbc连接数据库准备工作 DBUtil util = new DBUtil(); Connection conn = util.openConnection(); // 插入数据库操作用 String saveOrderSql = "insert into ordertbl (orderTime, userId, tableId, personNum) values (?, ?, ?, ?)"; PreparedStatement ps = null; // 读取最新订单号操作用 Statement statement = null; ResultSet orderIdSet = null; try { ps = conn.prepareStatement(saveOrderSql); ps.setString(1, order.getOrderTime()); ps.setInt(2, order.getUserId()); ps.setInt(3, order.getTableId()); ps.setInt(4, order.getPersonNum()); ps.executeUpdate(); // 返回此订单编号,因为id为自增主键,所以取其最大即为最新订单号 String returnOrderIdSql = "select max(id) as id from ordertbl"; statement = conn.createStatement(); orderIdSet = statement.executeQuery(returnOrderIdSql); if (orderIdSet.next()) { // 获得订单号 int id = orderIdSet.getInt(1); return id; } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (orderIdSet != null) { orderIdSet.close(); orderIdSet = null; } if (statement != null) { statement.close(); statement = null; } if (ps != null) { ps.close(); ps = null; } if (conn != null) { conn.close(); conn = null; } } catch (SQLException e) { e.printStackTrace(); } } return 0; } @Override public void updateTableStatus(int tableId) { // jdbc连接数据库准备工作 DBUtil util = new DBUtil(); Connection conn = util.openConnection(); // 更新此桌状态操作用 String updateSql = "update tabletbl set flag = 1 where id = ?"; PreparedStatement ps = null; try { // 此桌已订出, table表中flag置位 ps = conn.prepareStatement(updateSql); ps.setInt(1, tableId); 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(); } } } @Override public void updateTableStatusEx(int orderId) { // 此处暂时不做操作 } }
然后写StartTableServlet处理请求与响应:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class StartTableServlet 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 orderTime = req.getParameter("orderTime"); String userId = req.getParameter("userId"); String tableId = req.getParameter("tableId"); String personNum = req.getParameter("personNum"); // 将他们放入实例化的Order对象封装起来 Order order = new Order(); order.setOrderTime(orderTime); order.setUserId(Integer.parseInt(userId)); order.setTableId(Integer.parseInt(tableId)); order.setPersonNum(Integer.parseInt(personNum)); // 定单数据存入MySQL端,更新对应桌号是否有人的状态,并获得返回的订单号传回客户端 OrderDao orderDao = new OrderDaoImpl(); int orderId = orderDao.saveOrder(order); orderDao.updateTableStatus(Integer.parseInt(tableId)); pw.print(orderId); pw.flush(); pw.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
最后注册新的servlet:
<servlet> <servlet-name>StartTableServlet</servlet-name> <servlet-class>com.moka.servlet.StartTableServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>StartTableServlet</servlet-name> <url-pattern>/servlet/StartTableServlet</url-pattern> </servlet-mapping>
至此服务器端搭建完毕