2011-04-22 33 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(); 

我希望別人認爲這有用。