前言

在开发一个点餐软件时,app的订单数据是使用本地Sqlite数据库,在提交订单数据后,当订单数据在后台(Mysql数据库)发生变化时(如:已买单),本地数据如何改变呢?

思路

前台在查询时,将后台订单数据以数组方式发送到前台进行更新(update)

实现

服务端实现

定义一类订单类

package yybwb;

public class orderdetail {
public Integer id; //,
public Integer orderID;
public Integer menuID;
public String num;
public Integer state;
public String Tno; // //
public String remark; public orderdetail(int id,int orderID, int menuID,String num, int state,String Tno,String remark)
{
this.id = id;
this.orderID = orderID;
this.menuID = menuID;
this.num = num;
this.state = state;
this.Tno= Tno;
this.remark= remark; }
}

通过一方法获取订单信息

 public static ArrayList<orderdetail> getorderdetaillists(String Tabno){
ArrayList< orderdetail> result = new ArrayList< orderdetail>();
Connection con = null; //声明Connection对象
PreparedStatement ps = null;
ResultSet rs = null;
/*
* tabletal的数据在新订单生成时修改
*/
String sql = "select orderID,menuID,num,state,Tno,remark from orderdetailtal where state=1"; try{
con = getConnection(); //获得连接
ps = con.prepareStatement(sql); //获得预编译语句
//ps.setInt(1, Integer.valueOf(r_id)); //设置参数
rs = ps.executeQuery(); //执行查询
while(rs.next()){ String remark = rs.getString(6);
String Tno = rs.getString(5);
// int orderID = rs.getInt(1);
int menuID = rs.getInt(2);
double num = rs.getDouble(3);
String.format("%.2f", num); //1.23
int state =rs.getInt(4); //new String(rs.getString(2).getBytes("ISO-8859-1"),CHAR_ENCODING);
// new String(rs.getString(3).getBytes("ISO-8859-1"),CHAR_ENCODING);
orderdetail c = new orderdetail(1,1,menuID, String.format("%.2f", num),state,Tno,remark);
result.add(c); //System.out.println(Tno+','+remark);
}
System.out.println("get orderdetail lists");
}catch(Exception e){
e.printStackTrace();
}
finally{
try{
if(rs != null){
rs.close();
rs = null;
}
}catch(Exception e){
e.printStackTrace();
}
try{
if(ps != null){
ps.close();
ps = null;
}
}catch(Exception e){
e.printStackTrace();
}
try{
if(con != null){
con.close();
con = null;
}
}catch(Exception e){
e.printStackTrace();
}
}
return result;
}

将订单信息传递到客户端

 else if(msg.startsWith("<#GET_ORDERDETAIL#>")){//消息为获取台表2014-7-22
msg = msg.substring(19); //提取内容
ArrayList<orderdetail> cmList = DBUtil.getorderdetaillists(msg); //获得台列表
int size = cmList.size(); //个数
dout.writeInt(size); //返回个数
String reply = din.readUTF(); //等待客户端反馈
if(reply.equals("<#READY_TO_ORDERDETAIL#>")){ //如果客户端已经准备好
for(orderdetail c:cmList){
StringBuilder sb = new StringBuilder(); sb.append(String.valueOf(c.id));
sb.append("|");
sb.append(String.valueOf(c.orderID));
sb.append("|");
sb.append(String.valueOf(c.menuID));
sb.append("|");
sb.append(c.num);
sb.append("|");
sb.append(String.valueOf(c.state));
sb.append("|");
sb.append(c.Tno);
sb.append("|");
sb.append(c.remark); dout.writeUTF(sb.toString()); //发送消息到客户端
}
}
}

客户端实现

定义一个订单类

 package com.realhope.rmeal.bean;

 /**
*
* @author Wuchunyuan
* 订单明细类
*/
public class OrderDetail{
private Integer _id;
private Integer orderID;
private Integer menuID;
private String num; // 数量
private Integer state; // 状态
private String remark; // 备注
private String Tno; public OrderDetail() {
super();
}
public OrderDetail(Integer _id, Integer orderID, Integer menuID,
String num, Integer state, String Tno,String remark) {
super();
this._id = _id;
this.orderID = orderID;
this.menuID = menuID;
this.num = num;
this.state = state;
this.remark = remark;
this.Tno = Tno;
}
public Integer get_id() {
return _id;
}
public void set_id(Integer _id) {
this._id = _id;
}
public Integer getOrderID() {
return orderID;
}
public void setOrderID(Integer orderID) {
this.orderID = orderID;
}
public Integer getMenuID() {
return menuID;
}
public void setMenuID(Integer menuID) {
this.menuID = menuID;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
} public String getTno() {
return Tno;
}
public void setTno(String Tno) {
this.Tno = Tno;
} }

发送获取订单的消息到服务器,得到服务器发来数据

  String msg = "<#GET_ORDERDETAIL#>"+TableN;
mc.dout.writeUTF(msg); //发出获取新菜单表请求
mc.dout.flush();
int size = mc.din.readInt(); //获取个数 mc.dout.writeUTF("<#READY_TO_ORDERDETAIL#>");
mc.dout.flush(); for(int i=0;i<size;i++){
msg = mc.din.readUTF(); //读取每条信息
String [] sa = msg.split("\\|"); //切割字符串 OrderDetail OrderDetaillists = new OrderDetail(Integer.valueOf(sa[0]),Integer.valueOf(sa[1]),
Integer.valueOf(sa[2]),String.valueOf(sa[3]),Integer.valueOf(sa[4]),String.valueOf(sa[5]),
String.valueOf(sa[6]));
((MenuActivity)mContext).lstDate_OrderDetailLists.add(OrderDetaillists);
}

执行SQl语句更新本地Sqlite数据库

 /  * 2014-10-14
* @param lstDate_OrderDetailLists
*/ public void updateOrderDetail(List<OrderDetail> lstDate_OrderDetailLists){
DBHelper dbM = new DBHelper(this.context);
SQLiteDatabase db = dbM.getReadableDatabase();
db.execSQL("DROP TABLE IF EXISTS OrderDetailTal");
//db.execSQL("delete from OrderDetailTal");
int Count=lstDate_OrderDetailLists.size();
//创建表
db.execSQL("CREATE TABLE " + OrderDetails.TABLE+ " ("
+ OrderDetails._ID + " INTEGER PRIMARY KEY,"
+ OrderDetails.ORDERID+ " INTEGER,"
+ OrderDetails.MENUID+ " INTEGER,"
+ OrderDetails.NUM + " REAL,"
+ OrderDetails.STATE + " INTEGER,"
+ OrderDetails.Tno + " TEXT,"
+ OrderDetails.REMARK + " TEXT" + ");");
//逐一更新本地数据
for(int i=0 ; i<Count ;){
db.execSQL("insert into "+OrderDetails.TABLE+" ("+OrderDetails.ORDERID+","+ OrderDetails.MENUID+","+
OrderDetails.NUM +","+
OrderDetails.STATE+","+OrderDetails.Tno +","+OrderDetails.REMARK +") " +
"values ('"+String.valueOf(lstDate_OrderDetailLists.get(i).getOrderID())+"','"+
String.valueOf(lstDate_OrderDetailLists.get(i).getMenuID()) +"','"+
lstDate_OrderDetailLists.get(i).getNum() +"','"+
String.valueOf(lstDate_OrderDetailLists.get(i).getState()) +
"','"+String.valueOf(lstDate_OrderDetailLists.get(i).getTno()) +
"','"+String.valueOf(lstDate_OrderDetailLists.get(i).getRemark())+"')");
i++;
} db.close();
return;
}

App的前后台数据同步的更多相关文章

  1. 连接QuickBooks Online实现于IOS App数据同步功能的个人记录

    公司项目需要用WebService与QBO实现后台数据同步,由于国内没有做过类似第三方产品接口的资料,前前后后找了N久,终于实现功能,现把实现功能步骤贴上来分享: QBO开发者地址(主要用于创建QBO ...

  2. Django学习笔记(8)——前后台数据交互实战(AJAX)

    这里将自己这段时间学习的关于前后台数据交互的笔记写在这里,这里包含了Django传输数据给JS,AJAX的相关问题,跨域问题,如何解决AJAX的跨域问题等等.比较凌乱,请看到这篇博客的盆友见谅,如果我 ...

  3. AppleWatch___学习笔记(三)iPhone和Apple Watch上的数据同步

    WatchKit App类似于之前iOS 8上新推出的App Extension(应用扩展),比如Today Extension(今天扩展)和Share Extension(分享扩展).只要你对iOS ...

  4. 基于ssh框架的highcharts前后台数据交互实例

    Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...

  5. 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置

    Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...

  6. 高可用的并行MySQL数据同步及分布式

    首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术.基于此技术外延开来有很多中架构,分类归结为如下:      1.树状结构(Master,Backup-Master ...

  7. Eureka应用注册与集群数据同步源码解析

    在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean r ...

  8. Oracle CDC (Change Data Capture)更新数据捕获——Asynchronous HotLog Mode(附带简单的kettle任务实现数据同步)

    Performing Asynchronous HotLog Publishing Step 1   Source Database DBA: Set the database initializat ...

  9. Oracle19c单实例数据库配置OGG单用户数据同步测试

    目录 19c单实例配置GoldenGate 并进行用户数据同步测试 一.数据库操作 1.开启数据库附加日志 2.开启数据库归档模式 3.开启goldengate同步 4.创建goldengate管理用 ...

随机推荐

  1. 【Netty】Netty之ByteBuf

    一.前言 前面已经学习了Netty中传输部分,现在接着学习Netty中的ByteBuf. 二.ByteBuf 2.1 ByteBuf API 在网络上传输的数据形式为Byte,Java NIO提供了B ...

  2. zabbix监控Elasticsearch集群

    本节以 zabbix 为例,介绍如何使用监控系统完成 Elasticsearch 的监控报警. github 上有好几个版本的 ESZabbix 仓库,都源自 Elastic 公司员工 unterge ...

  3. maven问题:如何不继承父工程的依赖

    在maven中,使用父工程来管理所有的依赖,当子工程只需要用到父工程的部分依赖,而不是所有依赖时,只需要在父工程的依赖中加入<dependencyManagement></depen ...

  4. redis3.2.6 集群安装

    下载   [root@localhost ~]# cd /usr/local/src/ [root@localhost src]# wget http://download.redis.io/rele ...

  5. ElasticSearch的Marvel更新license

    Marvel安装的时候需要申请一个license,否则只有30天的使用时间,到期后最多保存7天的监控数据,为了造成不必要的监控数据丢失,建议安装的同时注册一个lincense,方法如下: 1.     ...

  6. UVALive-5731

    UVALive-5731 题意 一颗 n - 1 条边的有向树,要求整棵树成为强连通图,一次操作即构建一条路(一笔画), 限制: 新建的路上的所有边必须与原有的边逆向,即构建的路必须在原有的边和点上, ...

  7. mac下sublime text3 安装px转rem插件

    本人使用的是os-x系统,即mac系统,每次使用单位rem用其他网页转换很不方便.自己捣腾了一下插件,现在共享给大家 第一步: 先下载插件: https://github.com/narrow-gat ...

  8. js创建对象的多种方式及优缺点

    在js中,如果你想输入一个的信息,例如姓名,性别,年龄等,如果你用值类型来存储的话,那么你就必须要声明很多个变量才行,变量声明的多了的话,就会造成变量污染.所以最好的方式就是存储到对象中.下面能我就给 ...

  9. sqlserver 游标写法

    1.简单游标 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 declare m_cursor cursor scroll for select  Address,People ...

  10. rabbitmq 死信邮箱配置(dead-letter)

    DLX,Dead-Letter-Exchange(死信邮箱)利用DLX,当消息在一个队列中变成死信后,它能被重新publish到另一个Exchange,这个Exchange就是DLX.消息变成死信一向 ...