应用程序无法运行 - 尝试执行查询以打印某些值
方法:
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;
}
从主要
调用方法Cursor wow = db.trying("gold");
text = (TextView) findViewById(R.id.textView13);
text.setText((CharSequence) (wow));
答案 0 :(得分:2)
起初。由于您是直接将尝试变量添加到语句中,因此必须将变量包装为单引号或将其作为列进行插入。
"SELECT quantity FROM " + TABLE_CONTACTS + " WHERE name= '" + vg + "'";
第二个“大”问题,请看这里:
text.setText((CharSequence) (wow));
在这里,您尝试将Cursor
投射到CharSequence
,但这是不可能的。如果要从Cursor
检索数据,则必须使用Cursor类的getters方法中的一个 getString()方法:
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});
它很简单。占位符 ?
将替换为您的字符串值。