所以我正在尝试建立一个基本数据库,其客户端有4个字段,id,firstname,lastname和age。我有一种方法可以放入数据,另一种方法可以将数据输出,以确保它正常工作。这就是我所拥有的:
在MainActivity类的开头:
SQLiteDatabase clientsDatabase;
在我的onCreate方法中:
try
{
clientsDatabase = this.openOrCreateDatabase("Clients", MODE_PRIVATE, null);
clientsDatabase.execSQL("CREATE TABLE IF NOT EXISTS clients (id INT(3), fName VARCHAR, lName VARCHAR, age INT(3))");
}
catch(Exception e)
{
e.printStackTrace();
}
我将新数据放入的方法是:
public void addMember(int id, String f, String l, int a)
{
clientsDatabase.execSQL("INSERT INTO clients (id, fName, lName, age) VALUES (" + id + ", '" + f + "', '" + l + "', " + a + ")");
}
我根据您提供给它的ID记录数据的方法是:
public void printMember(int id)
{
Cursor c = clientsDatabase.rawQuery("SELECT * FROM clients WHERE id = " + Integer.toString(id), null);
int idIndex = c.getColumnIndex("id");
int fNameIndex = c.getColumnIndex("fName");
int lNameIndex = c.getColumnIndex("lName");
int ageIndex = c.getColumnIndex("age");
c.moveToFirst();
while (c != null)
{
Log.i("Results - id", Integer.toString(c.getInt(idIndex)));
Log.i("Results - First name", c.getString(fNameIndex));
Log.i("Results - Last name", c.getString(lNameIndex));
Log.i("Results - Age", Integer.toString(c.getInt(ageIndex)));
c.moveToNext();
}
c.close();
}
最后!我使用'onClick'方法设置了一个按钮:
public void logUser(View view)
{
addMember(1, "Clark", "Kent", 30);
printMember(1);
}
当我按下按钮时,模拟器崩溃了,这就是日志中显示的内容(很多,所以我不想再发帖了,所以我放了一些截图):
奇怪的是 IT IS 记录正确的信息。之后由于某种原因它崩溃了。
我知道这不是最好的方法,但我真的需要这种方式来工作,所以感谢任何帮助
答案 0 :(得分:1)
您应该将while循环更改为
while (!c.isAfterLast()) {
...
}
因为c永远不会为空,所以它只是向下和向下移动,直到数据库中没有行为止。