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

为了实现顾客下单的功能,需要在MySQL数据库的中设置一张表:ordertbl

然后在服务器端的Wireless项目下的com.moka.entity包中新建一个此表的对象类Order,就像登录部分的User一样:

/**
 *    用于封装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 .. 省略
View Code

同样,在对应包中建立对于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);
}
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) {
        // 此处暂时不做操作
    }

}
View Code

然后写StartTableServlet处理请求与响应:

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);
    }

}
View Code

最后注册新的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>

至此服务器端搭建完毕

原文地址:https://www.cnblogs.com/moka/p/3078153.html