App的前后台数据同步
前言
在开发一个点餐软件时,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的前后台数据同步的更多相关文章
- 连接QuickBooks Online实现于IOS App数据同步功能的个人记录
公司项目需要用WebService与QBO实现后台数据同步,由于国内没有做过类似第三方产品接口的资料,前前后后找了N久,终于实现功能,现把实现功能步骤贴上来分享: QBO开发者地址(主要用于创建QBO ...
- Django学习笔记(8)——前后台数据交互实战(AJAX)
这里将自己这段时间学习的关于前后台数据交互的笔记写在这里,这里包含了Django传输数据给JS,AJAX的相关问题,跨域问题,如何解决AJAX的跨域问题等等.比较凌乱,请看到这篇博客的盆友见谅,如果我 ...
- AppleWatch___学习笔记(三)iPhone和Apple Watch上的数据同步
WatchKit App类似于之前iOS 8上新推出的App Extension(应用扩展),比如Today Extension(今天扩展)和Share Extension(分享扩展).只要你对iOS ...
- 基于ssh框架的highcharts前后台数据交互实例
Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...
- 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置
Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...
- 高可用的并行MySQL数据同步及分布式
首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术.基于此技术外延开来有很多中架构,分类归结为如下: 1.树状结构(Master,Backup-Master ...
- Eureka应用注册与集群数据同步源码解析
在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean r ...
- Oracle CDC (Change Data Capture)更新数据捕获——Asynchronous HotLog Mode(附带简单的kettle任务实现数据同步)
Performing Asynchronous HotLog Publishing Step 1 Source Database DBA: Set the database initializat ...
- Oracle19c单实例数据库配置OGG单用户数据同步测试
目录 19c单实例配置GoldenGate 并进行用户数据同步测试 一.数据库操作 1.开启数据库附加日志 2.开启数据库归档模式 3.开启goldengate同步 4.创建goldengate管理用 ...
随机推荐
- 【Netty】Netty之ByteBuf
一.前言 前面已经学习了Netty中传输部分,现在接着学习Netty中的ByteBuf. 二.ByteBuf 2.1 ByteBuf API 在网络上传输的数据形式为Byte,Java NIO提供了B ...
- zabbix监控Elasticsearch集群
本节以 zabbix 为例,介绍如何使用监控系统完成 Elasticsearch 的监控报警. github 上有好几个版本的 ESZabbix 仓库,都源自 Elastic 公司员工 unterge ...
- maven问题:如何不继承父工程的依赖
在maven中,使用父工程来管理所有的依赖,当子工程只需要用到父工程的部分依赖,而不是所有依赖时,只需要在父工程的依赖中加入<dependencyManagement></depen ...
- redis3.2.6 集群安装
下载 [root@localhost ~]# cd /usr/local/src/ [root@localhost src]# wget http://download.redis.io/rele ...
- ElasticSearch的Marvel更新license
Marvel安装的时候需要申请一个license,否则只有30天的使用时间,到期后最多保存7天的监控数据,为了造成不必要的监控数据丢失,建议安装的同时注册一个lincense,方法如下: 1. ...
- UVALive-5731
UVALive-5731 题意 一颗 n - 1 条边的有向树,要求整棵树成为强连通图,一次操作即构建一条路(一笔画), 限制: 新建的路上的所有边必须与原有的边逆向,即构建的路必须在原有的边和点上, ...
- mac下sublime text3 安装px转rem插件
本人使用的是os-x系统,即mac系统,每次使用单位rem用其他网页转换很不方便.自己捣腾了一下插件,现在共享给大家 第一步: 先下载插件: https://github.com/narrow-gat ...
- js创建对象的多种方式及优缺点
在js中,如果你想输入一个的信息,例如姓名,性别,年龄等,如果你用值类型来存储的话,那么你就必须要声明很多个变量才行,变量声明的多了的话,就会造成变量污染.所以最好的方式就是存储到对象中.下面能我就给 ...
- 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 ...
- rabbitmq 死信邮箱配置(dead-letter)
DLX,Dead-Letter-Exchange(死信邮箱)利用DLX,当消息在一个队列中变成死信后,它能被重新publish到另一个Exchange,这个Exchange就是DLX.消息变成死信一向 ...