使用预准备语句在循环中高效查询嵌入式数据库

前几天我问了一个类似的问题 ,但后来我意识到自己已经超前了。 我正在寻找有关处理以下方案的正确方法的建议。 我正试图以最快的方式为给定的地址和城市SELECT正确的经度和纬度。

我的COORDINATES表有25,000行,看起来像这样:

![在此处输入图像说明

我有一个Java HashMap<Integer, List> ,它包含一个Integer作为键,以及一个包含2个条目,一个地址和一个城市的ArrayListHashMap的大小为500。

我需要使用4种不同类型的SELECT语句,因为每种语句都比以前更宽松,如下所示:

 SELECT LATITUDE, LONGITUDE FROM coordinates WHERE(address::text = ? AND community::text = ?) UNION ALL SELECT LATITUDE, LONGITUDE FROM coordinates WHERE (address::text = ? AND community::text LIKE ?) UNION ALL SELECT LATITUDE, LONGITUDE FROM coordinates WHERE (address::text LIKE ? AND community::text = ?) UNION ALL SELECT LATITUDE, LONGITUDE FROM coordinates WHERE (address::text LIKE ? AND community::text LIKE ?) 

注意使用LIKE= 。 另请注意我正在使用UNION ALL聚合所有结果,而我实际上只对单个最佳匹配结果感兴趣,以避免继续查询是否找到匹配项。 也许LIMIT可能会有所帮助。

如果我只是遍历我的HashMap并且在数据库中打了500多次(用4部分查询)……由于我没有利用SQL服务器,这看起来很痛苦。 现在花了一分多钟。 我使用H2作为我的嵌入式数据库,但如果需要,我愿意使用Derby或Hyper。

  • 循环浏览HashMap并为每个条目检索相应的,最佳匹配的经度/纬度(如果有)的最快方法是什么? 请注意我必须匹配? 在准备好的报表中,每个条目都有相应的地址和城市。 再次,您可以在此处查看我当前的方法。

  • 我倾向于存储过程,但像这样的教程提到创建存储过程的类的JAR文件,然后将其安装到Derby。 如何部署具有依赖于JAR存储过程的嵌入式数据库的独立Java应用程序?