2017-02-18 141 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

那是因爲你只讀過一次結果。 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呃,這是真的。固定。 – JonZarate

2

這是因爲您的光標總是移動到click事件的第一個位置。嘗試做如下::

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

或者如果你想看到所有的條目做這樣的事情:

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()告訴光標是否指向最後一行之後的位置(這是要打破你的循環點)。

相關問題