android.database.sqlite.SQLiteException:没有这样的列

时间:2013-05-29 17:15:12

标签: java android xml sqlite

当我执行此查询时,我得到'android.database.sqlite.SQLiteException:没有这样的列'是什么错误?

    public Cursor Getupdate(String rid) throws SQLException 
        {

Cursor m1Cursor = db.rawQuery("SELECT _id FROM  Meeting   where meet="+rid , null);
    if (m1Cursor != null) {           
        if(m1Cursor.getCount() > 0)
        {

             m1Cursor.moveToFirst();
        }
    }
 return m1Cursor;
}

logcat的

05-28 01:22:27.999: E/AndroidRuntime(1411): FATAL EXCEPTION: main
05-28 01:22:27.999: E/AndroidRuntime(1411): android.database.sqlite.SQLiteException: no such column: ttyuhomk: , while compiling: SELECT _id FROM  Meeting where meet=rage

5 个答案:

答案 0 :(得分:28)

对于字符串数据类型,总是使用像'“+ rid +”'“这样的引号,因为rid是String,你会收到错误。

只有当rid为int时,才应使用 + rid

答案 1 :(得分:17)

你需要在Where子句检查中使用撇号('),比如

db.rawQuery("SELECT _id FROM  Meeting   where meet='"+rid+"'" , null);

答案 2 :(得分:5)

您也可以这样使用。

db.rawQuery("SELECT _id FROM  Meeting   where meet=?" ,
            new String [] {rid});

这也将解决SQL注入问题。

答案 3 :(得分:4)

或者,更好的是,使用PreparedStatement并绑定变量。它会为你正确地逃避字符串和日期。它还有助于解决SQL注入问题。

还有人不知道这个吗?

答案 4 :(得分:0)

只需使用单引号 ('<YOUR_ID_TO_MATCH_WITH>')

如果以上答案还不清楚,只需使用单引号将 where 子句括起来即可。

例如:db.update(TABLE_USER,contentValues, "$KEY_TOKEN='${token}'",null)

注意 '$token' 中的引号。仅此而已! ?