Java 为表1中的每个位置查找表2中最近的位置

Java 为表1中的每个位置查找表2中最近的位置,java,mysql,database,jdbc,Java,Mysql,Database,Jdbc,我目前使用的mySQL数据库有两个表:一个称为source,另一个称为siteinfo siteinfo表如下所示: +-----------+----------+----------+ | longitude | latitude | sitecode | +-----------+----------+----------+ | 1.3009 | 1.900989 | 2 | +-----------+----------+----------+ | 1.7034

我目前使用的mySQL数据库有两个表:一个称为source,另一个称为siteinfo

siteinfo表如下所示:

+-----------+----------+----------+
| longitude | latitude | sitecode |
+-----------+----------+----------+
|    1.3009 | 1.900989 |        2 |
+-----------+----------+----------+
|    1.7034 | 1.20034  |        3 |
+-----------+----------+----------+
同样,源表如下所示:

+-----------+----------+----------+
| longitude | latitude | sitecode |
+-----------+----------+----------+
|    1.3009 | 1.900989 |   NULL   |
+-----------+----------+----------+
我的基本目标是:

对于源表中的每一行,我希望获取名为经度和纬度的列,并将它们与siteinfo表中相应的经度和纬度列进行比较

源表中长行和Lat行与siteinfo表中的行最相似的行,则会使用siteinfo表中sitecode列的相应sitecode更新sitecode列

例如,源表中的long和lat值与siteinfo表第一行中的值最接近,因此sitecode更新为2

为了解决这个问题,我知道我必须创建两个结果集,并使用whilenext遍历每个结果集的每一行。问题是,如何比较以找到最相似的条目

我想用蛮力来做,使用For循环来比较,比如说,源Resultset的第一行条目与Siteinfo Resultset的每一行,然后递增到第二行

但是,我知道resultset是由next函数迭代每一行的,这与for循环不同,因为我想将一个resultset的第一行与另一个resultset的每一行进行比较


其次,如何找到两个结果表的列条目的差异?

不,您不必创建两个结果集。你可以创建一个MySQL函数来计算两点之间的距离

创建功能大圆圈长1倍、宽1倍、长2倍、宽2倍 双倍回报 返回6371*acoscosradianslat1*cosradianslat2*cosradianslon2-radianslon1+sinradianslat1*sinradianslat2 。。。然后像这样使用更新查询

更新`source`SET`source`.`sitecode`= 从“站点信息”中选择“站点代码”` 按大圆排列的顺序为:来源、经度、来源、纬度、站点信息、经度、站点信息、纬度` 限制1 请注意,上面的查询将执行与交叉联接笛卡尔乘积等效的操作,因此对于较大的源表,处理的有效行数将显著增加。例如,使用两个500行表将有效处理250000行,使用两个5000行表将有效处理25000000行

如果表之间可能存在大量精确匹配,那么首先更新它们可能会更快

使现代化 `来源` 内连接 `站点信息` 在'source`.'longitude`='siteinfo`.'longitude`上 和'source`.'latitude`='siteinfo`.'latitude`` 设置`source`.`sitecode`=`siteinfo`.`sitecode`` 。。。然后更新其余的行

更新`source`SET`source`.`sitecode`= 从“站点信息”中选择“站点代码”` 按大圆排列的顺序为:来源、经度、来源、纬度、站点信息、经度、站点信息、纬度` 限制1 其中,`source`.`sitecode`为空
您可能应该看看MySQL是否支持空间数据类型和查询。然后,您可以只对服务器执行一个查询,而不是组合笨拙的Java代码来完成您想要的操作。工作非常完美,而且效率更高!顺便说一句,我发现分析较大的5000行需要相当长的时间,大约2分钟,有没有关于提高时间效率的建议?