sqlite应用程序不断崩溃

时间:2016-12-08 19:10:46

标签: android database sqlite android-sqlite

所以我正在尝试建立一个基本数据库,其客户端有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);
}

当我按下按钮时,模拟器崩溃了,这就是日志中显示的内容(很多,所以我不想再发帖了,所以我放了一些截图):

http://imgur.com/a/LpDDd

奇怪的是 IT IS 记录正确的信息。之后由于某种原因它崩溃了。

我知道这不是最好的方法,但我真的需要这种方式来工作,所以感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您应该将while循环更改为

while (!c.isAfterLast()) {
    ...
}

因为c永远不会为空,所以它只是向下和向下移动,直到数据库中没有行为止。