2011-04-22 58 views
0

我正在编写Android应用程序,以频繁的间隔下载游戏排行榜。结果存储在数据库中。为了保持下载与实况结果分开,我下载到一个表中,然后复制到另一个表。排行榜表格存储当前的排名和之前的排名。复制下载的版本到真人版之前,我更新以前的评级从目前的即:在Android中使用“替换”的意外SQL查询结果

mDb.execSQL(
     "update " + mTableName + " set last_rank = rank, last_world = world;");   

然后,我从下载表中选择相应的栏目,并更换成活动表:

mDb.execSQL(
    "replace into " + mTableName + " (world, _id, victories, owned_regions, rank, 
    clan_name) select world, _id, victories, owned_regions, rank, clan_name 
    from " + mTableName + "_dl;"); 

如果在更新之后但在替换之前获取数据库的副本,然后运行Android外部的替换查询(我使用SQLite Expert进行测试),然后得到预期的结果 - last_rank和last_world字段被保留,但如果我在Android中运行查询,然后复制_dl表的所有字段,并且last_rank和last_world都是过度的,用tehir默认值编写。这是Android SQLite实现中的错误还是我做错了什么?

任何帮助,将不胜感激。谢谢。

回答

0

再次回答我自己的问题,尽管这不是一个解决方法。解决方案是使用现有记录集进行外连接。

String sql = String.format(
    "replace into %s " + 
    "select %s.world, " + 
    "%s._id, " + 
    "%s.victories, " + 
    "%s.owned_regions, " + 
    "%s.rank, " + 
    "%s.rank as last_rank, " + 
    "%s.world as last_world, " + 
    "%s.clan_name, " + 
    "%s.updated from " + 
    "%s left outer join " + 
    "%s on " + 
    "%s._id = " + 
    "%s._id", 
    mTableName, // replace into 
    mTableName + "_dl", // world 
    mTableName + "_dl", // ._id 
    mTableName + "_dl", // victories      
    mTableName + "_dl", // owned regions      
    mTableName + "_dl", // dl.current_Rank 
    mTableName, // prev rank 
    mTableName, // prev world 
    mTableName + "_dl", // clan name 
    mTableName + "_dl", // updated 
    mTableName + "_dl", // left outer join 
    mTableName, // on 
    mTableName, // tablename._id 
    mTableName + "_dl"); // tablename_dl.id 

mSynchronizeQuery = db.compileStatement(sql); 


mSynchronizeQuery.execute(); 

我希望别人认为这有用。