2017-02-18 8 views
-1

新しいデータベースを作成してデータを挿入するたびに、挿入されたデータを選択できますが、テーブルに挿入して選択すると、最初のデータが表示されます自体。SQLiteデータベースでの選択Android

これはonClickListener(つまり、テーブルから選択する)のコードである:

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(); 
      } 
     } 
    }); 

これは私がテーブルに値を挿入するために使用するコードである:

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

これは、結果を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()はそれはあなたがあなたのループを切断したいポイントです(カーソルが最後の行の後の位置を指しているかどうかを伝えます)。

関連する問題