Android 中来自 SQLite 数据库的单行

Single Row from SQLite Database in Android

我正在努力尝试通过 ID 从我的数据库中获取一行,但无法弄清楚为什么它不起作用。

在我的 DatabaseHelper Class 我有这段代码

public Cursor getData(String Id) {

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor res = db.rawQuery("select * from " + BirdDB.BIRD_TABLE + "Where BIRD_ID = ?", new String[]{Id});
        return res;

    }

Col_0是table中小鸟的ID。 这是我 activity 页面中的内容。

public void viewASingle() {
        viewABird.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Cursor res = MainActivity.myDB.getData(txt_Id.getText().toString());
                        if (res.getCount() == 0) {

                            showMessage("Error", "Nothing Found");
                            return;
                        }
                        StringBuffer buffer = new StringBuffer();
                        while (res.moveToNext()) {

                            buffer.append("ID :" + res.getString(0) + "\n");
                            buffer.append("Name : " + res.getString(2) + "\n");
                            buffer.append("Notes : " + res.getString(3) + "\n");
                            buffer.append("Location : " + res.getString(4) + "\n");
                            buffer.append("Date And Time : " + res.getString(5) + "\n");
                        }

                        showMessage("Data", buffer.toString());
                    }
                }
            );
    }

所以我确保其余代码正常工作,并且是通过 toast 消息。该应用程序因 rawQuery 语句而崩溃,我相信我做对了。我确实检查了其他堆栈溢出问题并尝试了他们的陈述,但遗憾的是无济于事。有人有什么想法吗?

"Where BIRD_ID = ?" 的连接之前留下一个 space,因此 table 的名称不会符合条件。另外我建议使用异常处理,它会帮助你调试,也会让你的程序更 stable