我编写了以下数据库查询。 但是,当我访问显示结果的列表活动时,应用程序崩溃。
我已经将错误跟踪到下面的方法(其他更简单的查询方法可以正常工作):
public Cursor fetchInterface_HSE_Entries(String string) throws SQLException{
String[] columns = new String[] {KEY_ROW_ID_INTERFACE, KEY_TEXTVIEW_VALUE, KEY_CATEGORY_OPTIONS, KEY_WORKSCREEN};
String whereClause = KEY_WORKSCREEN+"=" + string;
Cursor cursor = db.query(TEXTVIEWS_TABLE, columns, whereClause, null, null, null, null);
if(cursor != null){
cursor.moveToFirst();
}
return cursor;
}
这是我的错误日志的一部分:
12-31 16:13:38.851: E/AndroidRuntime(480): Caused by: android.database.sqlite.SQLiteException: no such column: testInterface1: , while compiling: SELECT _id, textviewvalue, categoryoptions, workscreen FROM interfacetable WHERE workscreen=testInterface1
答案 0 :(得分:1)
尝试:
String whereClause = KEY_WORKSCREEN+"='" + string + "'";
您需要在查询中引用文本值,否则它们将被解释为列名(或函数,或其他)。
请注意,这对SQL注入攻击是不安全的,您应该使用绑定变量。
String whereClause = KEY_WORKSCREEN+" = ?";
Cursor cursor = db.query(TEXTVIEWS_TABLE, columns, whereClause,
new String[]{string}, null, null, null);
答案 1 :(得分:1)
因为你没有在whereClause周围加上引号。 尝试:
String whereClause = KEY_WORKSCREEN+"='" + string + "'";
您可以在错误日志中清楚地看到它:
SELECT _id, textviewvalue, categoryoptions, workscreen FROM interfacetable WHERE workscreen=testInterface1
应该是:
SELECT _id, textviewvalue, categoryoptions, workscreen FROM interfacetable WHERE workscreen='testInterface1'
答案 2 :(得分:1)
SELECT _id, textviewvalue, categoryoptions, workscreen FROM interfacetable WHERE workscreen=testInterface1
由于错误说你在接口表中没有testInterface1 collumn,我认为你的sql语句中应该有值而不是testInterface1。在db中运行查询,您将看到相同的错误。
答案 3 :(得分:1)
您需要将where子句中的字符串值放入引号。
答案 4 :(得分:1)
Workscren是字符串编辑您的查询并添加单引号。 Key-workscreen +“=”'+ string +'“就像那样