0

最近我使用$.getJSONflickr api发送请求以获取一些照片信息(我总共获得了 100 个数据)并在$.getJSON()的回调函数中,我使用$.each()and$.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) {

    });
  });
4

1 回答 1

0

恐怕我对 servlet 一无所知,但我可以从 MySQL 的角度解决这个问题。

在一个非常简单的层面上,如果您每次都从 Flickr 获取相同的数据,然后将所有这些数据插入到数据库中,那么您最终会得到重复的数据。

一个INSERT命令,无论它是如何包装的,都会添加一行数据。它不检查该数据是否已经存在。

概括地说,您的问题有三种解决方案。

1)写一些东西来检查一个项目是否已经存在,然后运行UPDATEINSERT酌情。

2)如果您总是收集完整的数据集,并且没有任何依赖于 ID 列的内容,则可以在插入新数据之前删除所有现有数据。如果它是表中唯一的数据,则可以使用TRUNCATE.

3) 将 MySQL 中的适当列标记为UNIQUE. 这将防止添加具有相同数据的另一行 - 但您的 servlet 可能不喜欢被传递错误。

最简单的是解决方案2。

您必须自己弄清楚这些解决方案是如何使用 servlet 实现的,但如果掌握了正确的概念,您应该能够找到一些东西。

于 2013-01-18T13:22:15.830 回答