마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 sqlite 질문

0 추천

테이블 생성하고 앱 시작과 동시에 다음과 같은 문장을 실행합니다.

앱을 처음 실행하면 출력 되는 것이 없고 두번째 실행부터 id 값이 2인 데이터 들이 출력 됩니다.

왜 id값이 1인 데이터는 출력이 안되는 건가요?

 

ContentValues values = new ContentValues();
		values.put(DriveEntity.StartTime,nowTime);
		values.put(DriveEntity.EndTime,nowTime);
		values.put(DriveEntity.Distance,0);
		values.put(DriveEntity.StartPointLat,pDWH.mGPS.GetWgsWE());
		values.put(DriveEntity.StartPointLon,pDWH.mGPS.GetWgsNS());
		values.put(DriveEntity.EndPointLat,pDWH.mGPS.GetWgsWE());
		values.put(DriveEntity.EndPointLon,pDWH.mGPS.GetWgsNS());
		db.insert(DriveEntity.TABLE_NAME,null,values);
		
		Cursor c = db.query(DriveEntity.TABLE_NAME,null,null,null,null,null,null,null);
		c.moveToFirst();
		while(c.moveToNext()){
			Log.e("id", c.getString(c.getColumnIndex("_id")));
			Log.e("StartTime", c.getString(c.getColumnIndex("StartTime")));
			Log.e("EndTime", c.getString(c.getColumnIndex("EndTime")));
			Log.e("Distance", c.getString(c.getColumnIndex("Distance")));
			Log.e("StartPointLat", c.getString(c.getColumnIndex("StartPointLat")));
			Log.e("StartPointLon", c.getString(c.getColumnIndex("StartPointLon")));
			Log.e("EndPointLat", c.getString(c.getColumnIndex("EndPointLat")));
			Log.e("EndPointLon", c.getString(c.getColumnIndex("EndPointLon")));
			Log.e("--------", "-------------------------");
		}
		

 

개미1 (1,260 포인트) 님이 2023년 4월 28일 질문

1개의 답변

0 추천
올리신 코드 만으로는 어디가 문젠지 말하기 어려울 듯 합니다. 안드로이드 스튜디오에 있는 db explorer에서 실제 데이터가 어떻게 들어가는지 확인을 먼저 해 보세요.

추가로 아래 부분이 좀 수상해 보이기는 합니다.
c.moveToFirst();
while(c.moveToNext())

디버거를 걸어서 실제로 커서가 어디에 위치하는지 체크해 보세요. 첫번째를 건너뛰고 두번째로 간 건 아닌지 확인해 보세요.
spark (228,350 포인트) 님이 2023년 4월 28일 답변
님의 코드를 보면 이렇게 진행이 될 것 같네요.
맨 처음 앱을 실행하고 db에 레코드를 하나 저장합니다. 그리고 커서를 처음으로 이동하고 아무 것도 하지 않고 다음으로 이동합니다.레코드가 한개이므로  따라서 아무 것도 출력이 안되겠죠.
다음 앱 실행시 레코드를 하나 더 추가합니다. 이번에는 레코드가 2개이므로 커서를 처음으로 이동했다 다음으로 이동하면 2번째 레코드가 출력됩니다.
...