функция курсора, чтобы избежать повторения в базе данных sqlite - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть база данных sqlite, которая содержит транспортные станции, я дублировал некоторые станции в базе данных, потому что они находятся в разных строках, поэтому я использовал курсор:

@Override
public void onLocationChanged(Location location) {
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
    float[] results = new float[1];
    Database db = new Database(Stations.this);
    try {
        db.createDataBase();
    } catch (IOException ioe) {
        throw new Error("unable to create database");
    }
    try {
        db.openDataBase();
    } catch (SQLException sqle) {
        throw sqle;
    }
    Cursor c = db.query("Stations", null, null, null, null, null, null);
    if (c.moveToFirst()) {
        do {
            Location.distanceBetween(latitude, longitude, c.getDouble(4), c.getDouble(3), results);
            if (results[0] < 1000) {
                googleMap.addMarker(new MarkerOptions().position(new LatLng(c.getDouble(4), c.getDouble(3))).title(c.getString(1) + " " + c.getString(2)));
                Toast.makeText(this, "nearby station "+ " " + c.getString(2) + "\n", Toast.LENGTH_SHORT).show();
            }

        }
        while (c.moveToNext());
    }
    if (googleMap != null) {
        LatLng googleLocation = new LatLng(latitude, longitude);
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(googleLocation));
    }
}

Это отображает станции, но дублируется, если станция упоминается дважды в базе данных, как я могу справиться с этим и не показывать станцию, которая уже была замечена, зная, что 2 станции имеют разные идентификаторы, но одинаковые имена ??

1 Ответ

0 голосов
/ 01 мая 2020

Вы можете использовать NOT EXISTS в своем запросе:

select s.* from stations s 
where not exists (
  select 1 from stations 
  where station_name = s.station_name and station_id < s.station_id
)

Заменить:

Cursor c = db.query("Stations", null, null, null, null, null, null);

на:

String sql = "select s.* from stations s where not exists (select 1 from stations where station_name = s.station_name and station_id < s.station_id)";
Cursor c = db.rawQuery(sql, null);
...