如何获取两列的值并存储在ArrayList中

时间:2017-04-20 08:38:58

标签: java database spring exception arraylist

我正在使用Spring框架,在下面的代码中,我希望从数据库中获取纬度和经度并将其存储在ArrayList中,然后计算它们之间的距离。

问题是我无法弄清楚如何在变量中获取两列的值,当我按照以下方式执行此操作[Ljava.lang.Object; cannot be cast to java.lang.Double异常抛出

任何人都可以帮助我吗?我知道我们可以使用2D ArrayList,但如何在以下代码中使用ArrayList

RiderService.java

@Component
public class RiderService {

     @Autowired RiderLocationRepository riderLocationRepository;

    public float Location(Double lattitude,Double longitude)
    {
        Double lat2=24.927437;
        Double lng2=67.094412;

          ArrayList<Double> allRidersLocation  = new ArrayList<Double>();
          allRidersLocation= riderLocationRepository.findAllRidersLocation();
          Iterator<Double> iterator = allRidersLocation.iterator();
            while (iterator.hasNext()) {
                System.out.println(" DB value " +  iterator.next().doubleValue());
            } 
            float distance=distFrom(lattitude, longitude, lat2, lng2);
            System.out.println("Distance : " + (distance/1000));
            return distance;
    }

RiderRepository

public interface RiderLocationRepository extends JpaRepository<RiderLocation, Long>{

    @Query("select r.latitude,r.longitude from RiderLocation r ")
    ArrayList<Double>  findAllRidersLocation();

}

3 个答案:

答案 0 :(得分:1)

您的查询返回一个Object数组,如下所示:

@Query("select r.latitude, r.longitude from RiderLocation r")
ArrayList<Object[]> array =  //execute_your_query();

要获得结果,您可以使用此功能:

for(Object[] obj : array){//<<---------------list of object with two columns
   double d1 = (Double) obj[0];//<<-------col 1
   double d2 = (Double) obj[1];//<<-------col 2
}

答案 1 :(得分:1)

使用JpaRepository默认提供给你的findAll方法,你需要这样的东西:

public float Location(Double lattitude,Double longitude)
    {
        Double lat2=24.927437;
        Double lng2=67.094412;

          List<RiderLocation> allRidersLocation  = riderLocationRepository.findAll();
          for (RiderLocation riderLocation : allRidersLocation) {
            // use the riderLocation as required, it's not clear to me what methods this has!!
            System.out.println("Distance : " + (distance/1000));
            return distance;
    }

答案 2 :(得分:1)

试试这个,

public float Location(Double lattitude,Double longitude)
    {
        Double lat2=24.927437;
        Double lng2=67.094412;

          List<RiderLocation> allRidersLocation  = riderLocationRepository.findAll();
          for (RiderLocation riderLocation : allRidersLocation) {
            float distance=distFrom(riderLocation.getLattitude(), riderLocation.getLongitude(), lat2, lng2);
            System.out.println("Distance : " + (distance/1000));
            return distance;
    }
    }

默认情况下,findAll()方法可用于CrudRepository

public interface RiderLocationRepository extends JpaRepository<RiderLocation, Long>{

}