gpt4 book ai didi

android - 主同步数据库

转载 作者:行者123 更新时间:2023-11-29 00:26:23 24 4
gpt4 key购买 nike

您好,我正在通过单击按钮将我的数据库与服务器同步以获得任何增量值。下面是检查所有值并在数据丢失时插入的代码,但从 Android 的角度来看,是否有任何优化的技术来进行同步

//new fields

public void updatenewfileds(ArrayList<String> s) {

ArrayList<String> da = new ArrayList<String>();

try {
String manu = "select MANUFACTURERID from ManufacturerDesc";
Cursor cc = mDb.rawQuery(manu,null);

Log.d("Cursor count", "Count =" + cc.getCount());
if (cc != null && cc.getCount() > 0) {
if (cc.moveToFirst());
do {
da.add(cc.getString(cc.getColumnIndex("MANUFACTURERID")));
System.out.println("here got all alreday avilable ids"+ cc.getString(cc.getColumnIndex("MANUFACTURERID")));
} while (cc.moveToNext());
cc.close();
} else {
cc.close();
}
// need to add only missing data
for(int i = 0; i<da.size(); i++){
boolean flag = false;
System.out.println(flag);
for(int j=0; j<i; j++){
if(da.get(i).equals(s.get(i*2))){
flag = true;
break;
}
}

if(flag == false){
String sql = "insert into ManufacturerDesc values('"+ s.get(i*2)+"','"+ s.get(i*2+1)+"');";
System.out.println("item inserted into db"+ s.get(i*2) +"******" + s.get(i*2+1) );
mDb.execSQL(sql);
}
}

} catch (SQLException mSQLException) {
Log.e(TAG, "getTestData >>" + mSQLException.toString());

throw mSQLException;
}

}

最佳答案

这是我的建议,[] 只是为了强调,因为我可能会回到它:

  • 设计您的 Android 数据库表,例如:{ _id, [server_id], .. your data .. }
  • 在服务器上的所有表上添加一个[time_changed] 时间戳。
  • 每当您的设备与服务器同步时,服务器应另外发送一个上次同步时间戳,例如System.currentTimeMilliseconds()(让服务器这样做以避免依赖同步时钟)。此时间戳存储在 Android 设备上,并在请求新同步时使用。
  • 当服务器收到同步请求时,存储的上次同步时间戳 再次从设备传递到服务器。现在一个简单的查询可以提取自时间戳以来所有相关的添加数据(减去一些常量以确保您获得所有内容)。例如 SELECT * FROM Mydata WHERE (time_changed > (last_sync-5000)); 5000 是 5 秒。
  • 现在,当您从服务器接收数据时,请记住添加 [server_id],这只是来自服务器的自动递增的 _id。这使您能够推断出您收到的某些行是否已知(这很可能与上面的负 5 秒有关)。
  • 推导是对设备的简单查询,例如:我是否已经有包含 [server_id] 的行,如果没有,我们添加它,如果是,则跳过它。

使用这种方法,您可以避免随着时间的推移发送越来越多的信息,因为您只发送在上次同步后更改的行(加上更多)。

如果您在服务器上编辑行,只需再次更新 time_changed 以反射(reflect)编辑。然后它将在下次同步期间自动包含并覆盖在设备上。

如果您计划在 Android 设备上进行大量数据库操作,我建议您尝试 MotoDev ,它可以插入到 eclipse 中并具有一些不错的数据库功能。包括数据库透视图和 ContentProvider 的自动生成(使数据库操作简单的好类)。

给出完整的解释或指南来完成所有这些超出了这个答案的范围。它应该只是让您了解如何完成,如果您希望改进同步过程,您现在有一些指导。

关于数据库的自动增量和时间戳机制,在 interwebz 上有很多例子。

快乐编码:)

关于android - 主同步数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19087041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com