2011-12-29 44 views
0

我有一個非常惱人的問題與我的一個應用程序。當我使用遞增版本的應用程序和數據庫發佈更新時。惱人的SQLite查詢問題與Expandable Listview

上更新被觸發,舊的數據庫被刪除,新的引進,下面是對更新代碼

db.execSQL("DROP TABLE IF EXISTS table"); 
     db.execSQL("DROP TABLE IF EXISTS android_metadata"); 

     try { 
      InputStream is = getAssets().open("sqlfile"); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
      String line = reader.readLine(); 
      while(line != null){ 
       db.execSQL(line); 
       line = reader.readLine(); 
      } 
      reader.close(); 

     } catch (IOException e) { 

      throw new Error("Error copying database"); 

     } 

    } 

的擴張菜單進入這個你可以在一個國家點擊它將列出該國的所有行。問題是,在以前的版本中,這工作正常。但是當更新時,這根本不起作用,但其他所有查詢都可以正常工作。以下是相關的查詢。

  protected Cursor getChildrenCursor(Cursor groupCursor) { 

        String countryID = Integer.toString(groupCursor.getInt(groupCursor.getColumnIndex("_id"))); 
        SQLiteDatabase checkDB = null; 
        checkDB = SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READONLY); 

        Cursor value = checkDB.rawQuery("SELECT * FROM countries WHERE open='1' AND country=?", new String[]{countryID}); 

        //checkDB.close(); 

        return value; 
      } 

回答

1

在onUpdate中,將數據庫數據備份到臨時表中,然後刪除表並創建新表。最後,複製舊數據。

UPDATE:

你也可以通過備份光標數據到Java變量,你打開,當你創建新的數據庫,把它們扔掉回來

+0

什麼我此刻的錯誤行爲。我想要做的就是刪除舊的並導入新的。當然這與你的建議是一樣的,但刪除臨時表 – Somk 2011-12-29 21:12:59

+0

你正在刪除表,這是刪除其內容 – 2011-12-29 21:39:40