前言

在开发一个点餐软件时,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. 基于binlog来分析mysql的行记录修改情况(python脚本分析)

          最近写完mysql flashback,突然发现还有有这种使用场景:有些情况下,可能会统计在某个时间段内,MySQL修改了多少数据量?发生了多少事务?主要是哪些表格发生变动?变动的数量是怎 ...

  2. python爬虫从入门到放弃(三)之 Urllib库的基本使用

    官方文档地址:https://docs.python.org/3/library/urllib.html 什么是Urllib Urllib是python内置的HTTP请求库包括以下模块urllib.r ...

  3. mysql之 mysqldump 备份恢复详解

    mysqldump是MySQL用于转存储数据库的客户端程序.转储包含创建表和/或装载表的SQL语句 ,用来实现轻量级的快速迁移或恢复数据库,是mysql数据库实现逻辑备份的一种方式. mysqldum ...

  4. Finding Similar Users-Euclidean Distance Score

    Purpose: Finding Similar Users Method:  Euclidean Distance Score ex2.py critics={'Lisa Rose': {'Lady ...

  5. Eclipse之JSON导包

    1.选中要导包的工程-–>2.右击选择创建文件夹--->3.将要导的包复制到该文件夹下--–>4.右击要导入的包-->5.选择Build path->Add to Bui ...

  6. nodejs零基础详细教程1:安装+基础概念

    第一章 建议学习时间2小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  7. php 可变函数

    //可变函数    function Test(){        $arr = func_get_args();       //获取所有参数 ,返回数组    $sum=0;     for($i ...

  8. Hibernate入门(二)

    一 Hibernate使用注解 可以使用注解创建Hibernate程序,使用注解的优点是不用创建映射文件,直接创建对象的关联. 使用hibernate注解需要导入注解相关的JAR包. 1.下载JAR包 ...

  9. Spring AOP拦截对Controller的请求时的配置失败

    简单的说,就是父子容器的问题,将AOP的配置信息放在applicationContext.xml中,该配置文件被ContextLoaderListener加载,Spring会创建一个WebApplic ...

  10. Spring事务隔离级别

    REQUIRED:业务方法需要在一个容器里运行.如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务. NOT_SUPPORTED:声明方法不需要事务.如果方法没有关联到一 ...