2011-07-25 11 views
0

私はXMLを解析しており、そのXMLを解析した後、DBにレコードを格納しています。私はDBとしてSQLiteを使用しています。私のデータはxmlのスライドショーの形式です。私はそれをいくつかのスライドショーのためにDBに保存すると、重複したエントリを取得します。たとえば、私のXMLに3つのスライドが含まれている場合、DB 6には異なるアイテムIDが格納されているため、すべてのスライドが2回保存されます。これは私がやっていることですDBに重複したエントリを取得する

ArrayList<SlideShowItem>slideItems=Utils.database.getSlideItemOfUrl(Constants.StoriesTable,tempSlideShow.getFullStoryUrl().substring(0, index - 1), type); 

          if (slideItems == null) { 
           Log.d("store in DB: ", " when SlideItems == null "); 

           Log.d("SlideShow Title: ", tempSlideShow.getTitle()); 
           Log.d("SlideShow pub Date: ", tempSlideShow.getPubDate()); 
           Utils.database.storeSlideItem(Constants.StoriesTable, myUrl, tempSlideShow.getSlideShow(), null); 
           //Utils.topStorySlidesArrayList = slideItems; 

          } else { 
           //Log.d("SlideShow Title: ", tempSlideShow.getTitle()); 
           Log.d("Already in DB ", " when SlideItems is not null "); 
           Utils.topStorySlidesArrayList = slideItems; 

          } 

私は助けていただきありがとうございます。私はいくつかのチェックを間違っていると思う。この点で私を助けてください。

Utils.database.storeSlideItemは、このコードが含まれています

public synchronized void storeSlideItem(String tableName, String url, ArrayList<SlideShowItem> list, String type) { 

    System.out.println("size of the Array list: " + list.size()); 

    String newType = null; 
    if (type == null) { 
     newType = "List"; 
    }else{ 
     newType = type; 
    }  

    try { 
     for (int i = 0; i < list.size(); i++) { 
      SlideShowItem item = list.get(i); 
      String itemUrl = url + i;// Unique URL for the DB; 
      String imgString = null; 
      Drawable drawable = item.getImage(); 
      if (item.getBody() != null) { 
       item.setBody(item.getBody().replace('\'', '`')); 
       // replace as it create syntax error for storing data 
      } 
      if (item.getSubTitle() != null) { 
       item.setSubTitle(item.getSubTitle().replace('\'', '`')); 
      } 

      if (drawable != null) { 
       Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 
       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 

       byte[] b = baos.toByteArray(); 
       imgString = Base64.encodeBytes(b); 
      } 

      if (isOpen()) { 
       myDB.execSQL("INSERT INTO " + tableName + "(" + column[1] + "," + column[2] + "," + column[3] + "," + column[4] + "," + column[6] 
         + "," + column[7] + ",type) VALUES('" + itemUrl + "','" + item.getSubTitle() + "','" + item.getBody() + "','" 
         + item.getImagePath() + "','" + item.getIndex() + "','" + imgString + "','" + newType + "Slide')"); 
       if (item.getBody() != null) { 
        item.setBody(item.getBody().replace('`', '\''));// " ' " 
        // replace as it create syntax error for storing data 
       } 
       if (item.getSubTitle() != null) { 
        item.setSubTitle(item.getSubTitle().replace('`', '\'')); 
       } 

       if (tableName.equals(Constants.StoriesTable)) { 
        item.setItemId(getItemID(tableName, itemUrl)); 
        Utils.hashListStoriesIds.put(itemUrl, item.getItemId()); 

        if (imgString != null) { 
         Utils.hashListImages.put(item.getItemId(), new Boolean(true)); 
        } else { 
         Utils.hashListImages.put(item.getItemId(), new Boolean(false)); 
        } 
       } 
      } 
     } 
    } catch (Exception e) { 
     Log.e("Error", "Exception: storeSlideItem type " + e.toString()); 
    } finally { 
     closeConnection(); 
    } 

} 
+0

あなたの 'Utils.database.storeSlideItem'メソッドのコードを表示してください。 – THelper

+0

@THelper iあまりにもコードを提供しています。 –

+0

私はあなたが最初にあなたのデータベースに物を保存してから、アイテムのプロパティのいくつかを変更していることに気付きましたか? (setBody、SetSubTitle、SetItemId)。プロパティを変更した後、dbに保存してはいけませんか? – THelper

答えて

0

は、あなたの項目に任意の一意のIDフィールドを持っていますか?データベーススキーマ内でプライマリキーにすることができれば、これによってすべてのエントリが異なるようになります。または、重複が追加されたときに例外がスローされ、問題を追跡できます。

+0

はい主キーがあります。これはitemIDであり、これは実行時にスライドのURLに基​​づいて生成されます。 –

+0

スライドを保存するときまたは作成するときにitemIDが生成されますか? URLを2回ロードして、スライド数を2倍にすることができますか? 同じURLを複数回ロードすると、3つの異なるitemIDまたは同じアイテムIDが3回取得されますか? 3つの異なるものを取得した場合は、それらを生成する別のメソッドを追加して、それぞれのURLで同じものにする必要があります。あなたがDBにプライマリキーを持っているので、問題はほぼ間違いなくスライドの重複です。 – ScouseChris

+0

Xupそれはすべてのスライドショーで起こるわけではないので、偶然です。ただし、itemIdはDBに保存する直前にスライドに割り当てられ、別の方法があります。 –

関連する問題