GPS로 위경도를 받을 수 있게 하고 DB에 저장하려고 하려고 합니다.

그런데 처음에는 하나 씩 잘 뜨다가 껐다 다시 켜면 테이블이 2개가 되는지 같은게 2개씩 뜨고 또 껐다 켜면 3개 씩 뜨고

이런 식입니다.....왜 그러는지 잘 모르겠어요... DB를 처음 건드려 보는거라...가르침 부탁드립니다..ㅜㅜ



/////////////// Main Activity/////////////////////////

public class MainActivity extends Activity {

    TextView tx;
    String provider = LocationManager.GPS_PROVIDER;
    LocationManager lc;
    DBase DBHelper;
    SQLiteDatabase db;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tx = (TextView) findViewById(R.id.textView1);

        Criteria criteria = new Criteria();
        criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
        criteria.setAccuracy(Criteria.ACCURACY_FINE); // 정확도
        criteria.setPowerRequirement(Criteria.POWER_LOW); // 전원 소비량

        // db셋팅부----------------------------------------------------------

        DBHelper = new DBase(this);
        db = DBHelper.getWritableDatabase();
       
        // gps셋팅부--------------------------------------------------------
        // LocationManager 생성
        lc = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        // 사용할 GPS Provider
        provider = lc.getBestProvider(criteria, true);

        // Latitude, Longitude 를 저장하는 Location 객체
        // 최근 갱신된 GPS값을 받아옴
        // Location location = lc.getLastKnownLocation(provider);

        // Latitude, Longitude를 TextView에 출력하는 showGPS 메소드 호출
        lc.requestLocationUpdates(provider, 10000, 1, new LocationListener() {

            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub
            }

            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
            }

            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
            }

            // 업데이트 조건이 발동되면 showGPS 메소드 호출
            public void onLocationChanged(Location location) {

                db.execSQL("INSERT INTO position(long,lat) VALUES ('"+
                          Double.toString(location.getLongitude()) +"','"
                        + Double.toString(location.getLatitude()) +"');");
               
                String str = "";
                Cursor cursor;

                cursor = db.rawQuery("SELECT * FROM position", null);
               
                Log.d("dbtest", "db객체에서 쿼리 실행후 결과값 커서에 저장");

                Log.d("dbtest", "while문 실행준비");
                while (cursor.moveToNext()) {

                    str += cursor.getString(cursor.getColumnIndex("long"));
                    str += "\t\t\t";
                    str += cursor.getString(cursor.getColumnIndex("lat"));
                    str += "\n";

                    tx.setText(str);
                }
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        db.execSQL("DROP TABLE IF EXISTS position");
        db.execSQL("CREATE TABLE position(_no INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "long text, lat text);");
    }
}



////////////// DB class/////////////////////////////////

public class DBase extends SQLiteOpenHelper {

    public DBase(Context context) {

        super(context, "running_man", null, 1);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        // TODO Auto-generated method stub

        db.execSQL("CREATE TABLE position(_no INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    "long text, lat text);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        // TODO Auto-generated method stub

        db.execSQL("DROP TABLE IF EXISTS position");

        onCreate(db);

    }

}