0
  public ArrayList<String> getQuietPlaces(String lng, String lat) {
        ArrayList<String> quietPlaces = new ArrayList<String>();
        SQLiteDatabase db = this.getReadableDatabase();
        String quietPlacesLocation = "SELECT (quietPlaceLongitude || \"/\" || quietPlaceLatitude) as locationCoordinates" +
                " FROM quietPlaces Where quietPlaceLongitude BETWEEN "
                 + lng +"-10 AND "
                 + lng + "+10 AND quietPlaceLatitude BETWEEN"
                + lat +"-10 AND "
                + lat + "+10";
        Cursor cursor = db.rawQuery(quietPlacesLocation, new String[]{lng, lat});

        if (cursor.getCount() > 0) {
            while (cursor.moveToNext()) {
                String locationCoordinate = cursor.getString(cursor.getColumnIndex("locationCoordinates"));
                quietPlaces.add(locationCoordinate);
            }
        }
        return quietPlaces;
    }

这个想法是返回所有落在 Y 轴内 +10 或 -10 的位置,对于 X 轴也是如此。它可以在 SQLBrowser 上运行,但是在 Android Studio 上可能会以不同的方式声明。我是这个软件的新手。

4

1 回答 1

0

由于您连接变量的值,lng并且lat您不能将它们作为rawQuery()您必须传递 null 的第二个参数传递。
如果你用/单引号括起来,也不需要使用和转义双引号:

String quietPlacesLocation = "SELECT (quietPlaceLongitude || '/' || quietPlaceLatitude) as locationCoordinates" +
        " FROM quietPlaces Where quietPlaceLongitude BETWEEN "
        + lng + "-10 AND "
        + lng + "+10 AND quietPlaceLatitude BETWEEN "
        + lat + "-10 AND "
        + lat + "+10";
Cursor cursor = db.rawQuery(quietPlacesLocation, null);


lng但是传递参数的 推荐方法lat是使用?占位符并将它们的值(在您的情况下为 4 个值)作为第二个参数传递,rawQuery()如下所示:

String quietPlacesLocation = "SELECT (quietPlaceLongitude || '/' || quietPlaceLatitude) as locationCoordinates" +
        " FROM quietPlaces Where quietPlaceLongitude BETWEEN "
        + ? + "-10 AND "
        + ? + "+10 AND quietPlaceLatitude BETWEEN "
        + ? + "-10 AND "
        + ? + "+10";
Cursor cursor = db.rawQuery(quietPlacesLocation, new String[] {lng, lng, lat, lat});
于 2019-11-21T16:02:52.193 回答