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

Android Cursor를 이용한 DB 데이터 사용에 대해서 질문드립니다!

0 추천

 Cursor.moveToNext(); 를 통하여 각 테이블에 대한 정보를 가져오고 싶습니다

제가 질문하고자 하는건  Cursor.moveToNext();의 뜻이 그 테이블의 다음행의 정보를 가져오는거 잖아요

제가 구하고자하는건  같은 테이블라인에 있는 정보를 두번 가져오고 싶은데 첫 번째 X,Y는 처음인 0번째 행의 정보부터 끝까지 가지고 오고싶고 두 번째 보이는 NX,NY는 0번째행 다음 행인 1번째 행부터 끝까지의 정보를 가져오고 싶습니다.

지금보이는 상태로 코드를 짜니 X,Y는 첫번째 정보면 나오고 NXNY는 처음부터 끝까지 데이터가 나오게 됩니다.  Cursor.moveToPosition(position); 를 사용하여 1번째 행의 데이터의 정보를 가져오면 그 데이터만 출력이 되는데 포지션으로 1번째 행을구한뒤 바로 Next를써서 1번째부터 쭉 정보를 얻을수가 있는지 질문 드립니다.

데이터베이스 고수님들 도와주세요 ㅠㅠ

.. (840 포인트) 님이 2017년 1월 4일 질문

1개의 답변

0 추천
 
채택된 답변
설명상으로만 보자면

SELECT 쿼리 날릴때 LIMIT 2 를 주고 moveToNext 하나만 두면 되지 않을 까? 싶은데 말입니다.
aucd29 (218,390 포인트) 님이 2017년 1월 5일 답변
..님이 2017년 1월 8일 채택됨
정말 감사합니다 우선 알려주신 LIMIT를 사용하여 원하는 행부터 데이터를 얻는건 성공하였습니다
제가 만들려고자 하는게 데이터베이스에 좌표값을 drawline에 넣어서 그림을 그려주는건데
님 말대로 LIMIT을 써서 다음행의 값부터 구하는건 성공을 하였는데
그림이 안그려집니다 ㅠㅠ
 X,Y는 0번째 행부터 좌표값을 불러들이고 NX,NY는 그다음행의 좌표값부터 불러들여
drawline(시작x,시작y,끝x,끝y)로 한선이 그어지는 형태라
 canvas.drawLine(Float.valueOf(X), Float.valueOf(Y), Float.valueOf(NX), Float.valueOf(NY), MyPaint);  코드처럼
drawline에 넣었는데 계속 그림 형태가 X,Y는 처음 좌표값에 고정이 되고 NXNY만 불러들여져서 ​ 이런 형태의 그림이 표현 됩니다. ㅠㅠㅠ제발 도움을 주시면 감사하겠습니다


-관련 코드입니다-
dbHelper = new DBHelper(Finalview.this, dbName, null, dbVersion);
        db = dbHelper.getReadableDatabase();
        Cursor c0 = db.rawQuery("SELECT * FROM Ingyu06 LIMIT 0,50", null);
        Cursor C1 = db.rawQuery("SELECT * FROM Ingyu06 LIMIT 1,50", null);
        String X = "";
        String Y = "";
        String NX = "";
        String NY = "";


        while (c0.moveToNext()) {
            X = c0.getString(2);
            Y = c0.getString(3);

            while (C1.moveToNext()) {
                NX = C1.getString(2);
                NY = C1.getString(3);
                canvas.drawLine(Float.valueOf(X), Float.valueOf(Y), Float.valueOf(NX), Float.valueOf(NY), MyPaint);
그리는게 문제가 아니라 loop 문에 대한 이해가 먼저 필요해 보이네요 ..

현재 루프를 보자면

c0 의 경우 moveToNext 에 의해 1, 1 이 라는 값을 얻었을 경우

c1 은 LIMIT 에 따라 1 에서 50까지 루프를 돈 뒤에 (c1 에 대한 moveToNext 가 49번 호출 되겠죠?)

c0 의 moveToNext 가 다시 호출 되겠죠 (이때는 2, 2 라는 값이라고 가정해 봅니다.)

이해 하셨으면 지금 머가 문제인지 파악 되셨을 겁니다.

그럼 어떻게 해야 되느냐

c0 를 먼저 하나 구합니다. 하나만 필요하니 limit 1 이면 되겠죠? x, y 에 넣고

그 다음 부터는 루프를 돕니다. nx, ny 에 c1 의 값을 넣으면
일단은 line 을 그릴 수 있는 조건 하나가 됩니다.

라인을 그린 뒤 nx, ny 값을 x, y 에 대입한 뒤 다시 moveToNext 에 들어가면
nx 에 다시 c1 에 값을 넣을 수 있겠죠 x, y 에는 이전의 값이 있을 것이고
...