2017-02-18 1 views
-1

새 데이터베이스를 만들고 데이터를 삽입 할 때마다 삽입 된 데이터를 선택할 수 있지만 두 번째로 테이블에 삽입하고 선택하려고하면 첫 번째 데이터가 표시됩니다. 그 자체.SQLite 데이터베이스에서 선택 안드로이드

:

mydb = openOrCreateDatabase("Countz_DB",MODE_PRIVATE,null); 

mnew.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      c = mydb.rawQuery("Select * from Countz",null); 
      if (c.moveToFirst()){ 
       name = c.getString(0); 
       desc = c.getString(1); 
       Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show(); 
      } 
     } 
    }); 

이 I 테이블에 값을 삽입하는 데 사용하는 코드이다

는 OnClickListener를 (즉, 테이블의 선택)의 코드
public void InsertintoCount(){ 
    String sqlc = "INSERT INTO Countz VALUES('"+name+"','"+desc+"','"+x+"','"+cDT+"');"; 
    newdb.execSQL(sqlc); 
    } 

답변

1

내가 테이블에 삽입이

if (c.moveToFirst()){ 
    do { 
      name = c.getString(0); 
      desc = c.getString(1); 
      Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show(); 
    } while(c.moveToNext()); 
} 
+0

고마워요! 그것은 일했다 ... !! –

1

결과를 한 번만 읽었기 때문입니다. Cursor에 여러 행이 있으면 그 행을 거쳐야합니다.

Cursor을 반복해야합니다. 이 일 경우

if (c.moveToFirst()){ 
    do { 
      name = c.getString(0); 
      desc = c.getString(1); 
      Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show(); 
    } while (c.moveToNext()); 
} 

것은 우리에게 알려주기 :

은 다음보십시오.

+1

첫 번째 항목을 건너 뜁니다. –

+0

@AbhishekJain Wops, 그건 사실입니다. 결정된. – JonZarate

2

커서가 항상 클릭 이벤트의 첫 번째 위치로 이동했기 때문입니다. 다음을 수행하십시오 ::

mnew.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     c = mydb.rawQuery("Select * from Countz",null); 
     if (c.moveToLast()){ 
      name = c.getString(0); 
      desc = c.getString(1); 
      Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show(); 
     } 
    } 
}); 

것은 당신이 다음 테이블에있는 모든 행을 반복하려면 ::

mnew.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     c = mydb.rawQuery("Select * from Countz",null); 
     if(c>0) { 
     c.moveToFirst(); 
     do { 
      name = c.getString(0); 
      desc = c.getString(1); 
      Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show(); 
     } while(c.moveToNext()); 
     } 
    } 
}); 

당신은 그 후 모든 게시 된 값을 얻을 것이다.

최근에 삽입 된 값을 원할 경우 삽입 작업 후에 rowId를 반환 한 다음 쿼리에서 "SELECT * FROM table WHERE id ="+ id;를 사용하여 데이터베이스에서 행을 가져와야합니다.

그러나 데이터베이스 트랜잭션을 처리하는 더 좋은 방법은 핸들러 클래스를 생성하고 필요한 곳에서 액세스하는 것입니다.

SQLite Database Example

1

두 번째 시간을 시도하고 선택하려고이 튜토리얼을 :: 따라, 그것은 나에게 첫 번째 데이터 자체를 보여줍니다.

첫 번째 항목 자체를 선택했기 때문입니다.

if (c.moveToFirst()){ 
    name = c.getString(0); 
    desc = c.getString(1); 
    Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show(); 
} 

알림 c.moveToFirst(). 그러면 커서의 첫 번째 항목으로 이동합니다. 마지막 항목을 원하면 c.moveToLast()을 사용하십시오.모든 항목을보고 싶다면

는 OR 같은 것을 할 : 커서가 마지막 행 후 위치 (즉, 당신이 당신의 루프를 중단 할 점이다 가리키는 여부를

if (c.moveToFirst()){ 
    while (!c.isAfterLast) { 
     name = c.getString(0); 
     desc = c.getString(1); 
     Snackbar.make(v, "Name:"+name+" Desc:"+desc, Snackbar.LENGTH_LONG).show(); 
     c.moveToNext(); 
    } 
} 

c.isAfterLast() 알려줍니다).

관련 문제