0

应用程序无法运行 - 尝试执行查询以打印特定值

方法:

public Cursor trying(String vg){
    String q="SELECT quantity FROM " + TABLE_CONTACTS +  " WHERE name=" + vg;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor  cursor = db.rawQuery(q,null);

            if (cursor != null) {
                cursor.moveToFirst();
            }
            return cursor;
    }

从 main 调用方法

Cursor wow = db.trying("gold");
text = (TextView) findViewById(R.id.textView13);
text.setText((CharSequence) (wow));
4

1 回答 1

2

首先。由于您直接将尝试变量添加到语句中,因此变量必须用单引号括起来,否则它会作为列插入。

"SELECT quantity FROM " + TABLE_CONTACTS +  " WHERE name= '" + vg + "'";

第二个“大”问题,看这里:

text.setText((CharSequence) (wow));

在这里,您正在尝试投射CursorCharSequence但这是不可能的。如果要从中检索数据,Cursor则必须在您的案例getString()方法中使用 Cursor 类的 getters 方法之一:

String quantity = wow.getString(0); // it returns your quantity from Cursor
text.setText(quantity);

现在它应该可以工作了。

推荐:

我建议您使用在查询中实际使用占位符的参数化语句。它们为向/从数据库添加和检索数据提供了更安全的方式。

让我们重写你的代码:

String q = "SELECT quantity FROM " + TABLE_CONTACTS + " WHERE name = ?";
SQLiteDatabase db = this.getReadableDatabase();
Cursor  cursor = db.rawQuery(q, new String[] {vg});

它工作简单。占位符?将替换为您的字符串值。

于 2013-04-05T20:19:00.173 回答