2013-01-18 70 views
0

最近我用$.getJSON發送請求Flickr的API得到一些照片信息(我有100個數據完全) 和$.getJSON()的回調函數,我用$.each()$.get('myServlet.do')把數據發送到servlet然後插入到MySQL數據庫。

我認爲它應該沒有問題,但我發現如果我使用上面的方法,我的數據庫將重複數據,有誰知道是什麼問題?

當servlet收到時,數據被複制,順便說一句。

這將是非常感激,如果有人可以給我一些建議...

這是我的代碼,我怎麼使用$.get()

$.getJSON('http://query.yahooapis.com/v1/public/yql?q=select id,title,location.latitude,location.longitude,dates.taken,farm,server,secret from flickr.photos.info where photo_id in' + '(select id from flickr.photos.search(0) where text=\"' + queryText + '\" and has_geo=1 and lat=22.993299484253 and lon=120.20359802246 and content_type=1 and radius=20 and api_key=\"' + appid + '\" limit 100) and api_key=\"' + appid + '\"&format=json', 

function (data) { 
    var clientTime = $('#clientTime').html(); 
    $.each(data.query.results.photo, 

    function() { 
    console.log(this.id + " " + this.title + " " + this.farm + " " + this.server + " " + this.dates.taken); 
    $.post('insertphotoinfo.do', { 
     id: encodeURI(this.id), 
     title: encodeURI(this.title), 
     farm: encodeURI(this.farm), 
     server: encodeURI(this.server), 
     secret: encodeURI(this.secret), 
     takendate: encodeURI(this.dates.taken), 
     latitude: encodeURI(this.location.latitude), 
     longitude: encodeURI(this.location.longitude), 
     clientTime: encodeURI(clientTime) 
    }, 

    function (Result) { 

    }); 
    }); 
+3

如果沒有看到'GET'的例子並且看到你的servlet代碼,我們就不能幫你。但一般來說,你不應該使用'GET'來做任何改變服務器狀態的事情; GET請求被認爲是*冪等*。使用'POST'來改變服務器的狀態。 –

回答

0

我怕我什麼都不知道servlets,但我可以從MySQL的角度來解決這個問題。

在一個非常簡單的層面上,如果您每次從Flickr獲取相同的數據,然後將所有數據插入到數據庫中,則最終會出現重複數據。

一個INSERT命令,但它被封裝,增加了一行數據。它不檢查數據是否已經存在。

抽象地說,有三種解決方案可以解決您的問題。

1)寫一些內容檢查項目是否已經存在,然後根據情況運行UPDATEINSERT。 2)如果您始終收集整套數據,並且您沒有任何內容依賴於ID列,則可以在插入新數據之前刪除所有現有數據。如果它是表中唯一的數據,則可以使用TRUNCATE

3)在MySQL中標記適當的列爲UNIQUE。這將阻止另一行添加相同的數據 - 但是您的servlet可能不喜歡被傳遞錯誤。

最簡單的就是解決方案2

你要搞清楚自己如何的任何解決方案都使用Servlet實現的,但你應該能夠找到合適的概念武裝。

+0

嗨,感謝您的回答,但我可能沒有描述我遇到的問題清楚,$ .each()的回調函數中的日誌顯示數據不重複,但不知何故數據servlet獲得重複... 所以,這不是關於我應該如何做mysql。 – Arvin

+0

啊。我假設如果你的數據庫中有100行,那麼運行你的東西,你最終會得到200行。然後300,400等 你是說即使你有一個空的數據庫,然後運行'$ .get('myServlet.do')'你多次得到一切嗎?每次都是兩倍嗎? 您如何/在哪裏看到數據是重複的? –

+0

我有一個空的數據庫,然後運行$ .get('myServlet.do'),數據庫中的數據是「不是一切」重複,一些數據多次,一些數據不。 所以我想它回調函數和servlet有問題... – Arvin

相關問題