2017-02-18 94 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()告诉光标是否指向最后一行之后的位置(这是要打破你的循环点)。

相关问题