0

最近、 flickr api$.getJSONにリクエストを送信して写真情報を取得し (合計で 100 個のデータを取得しました)、のコールバック関数で と を使用してデータをサーブレットに送信し、MySQL データベースに挿入します。$.getJSON()$.each()$.get('myServlet.do')

問題ないと思いますが、上記の方法を使用するとデータベースのデータが重複することがわかりました。何が問題なのか知っている人はいますか?

ところで、サーブレットが受信されたときにデータが複製されます。

どなたかアドバイスいただけると大変助かります...

これは私がどのように使用するかという私のコードです$.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) {

    });
  });
4

1 に答える 1

0

残念ながら、サーブレットについては何も知りませんが、MySQL の観点からこれに対処することができます。

非常に単純なレベルでは、毎回 Flickr から同じデータを取得し、そのすべてのデータをデータベースに挿入すると、データが重複することになります。

コマンドは、どのINSERTようにまとめられても、データの行を追加します。そのデータがすでに存在するかどうかはチェックしません。

要約すると、問題に対する解決策は 3 つあります。

1) 項目が既に存在するかどうかをチェックしてから実行する何かを書き、必要に応じて実行UPDATEINSERTます。

2) 常に完全なデータ セットを収集し、ID 列に依存するものがない場合は、新しいデータを挿入する前に既存のデータをすべて削除できます。それがテーブル内の唯一のデータである場合は、 を使用できますTRUNCATE

3) MySQL の適切な列を としてマークしますUNIQUE。これにより、同じデータで別の行が追加されるのを防ぐことができますが、サーブレットはエラーが渡されるのを好まない場合があります。

最も単純なのはソリューション 2 です。

これらのソリューションのいずれかがサーブレットでどのように達成されるかを自分で理解する必要がありますが、適切な概念を身につければ、何かを見つけることができるはずです。

于 2013-01-18T13:22:15.830 に答える