【问题标题】:android.database.sqlite.SQLiteException: no such columnandroid.database.sqlite.SQLiteException:没有这样的列
【发布时间】:2013-05-25 01:55:48
【问题描述】:

当我执行这个查询时,我得到'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

【问题讨论】:

    标签: java android xml sqlite


    【解决方案1】:

    对于字符串数据类型,请始终使用像这样的引号 '"+rid+"'",因为 rid 是字符串,你会得到错误。

    只有当 rid 是 int 时才应该使用 +rid

    【讨论】:

    • 你救了我! thnxx 亲爱的!!
    【解决方案2】:

    你需要在 Where 子句检查中使用撇号(') .. like

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

    【讨论】:

    • 展示得很好。现在如果 rid 是一个 int 数据类型呢?我会把它写成“SELECT _id FROM Meeting where meet=” + rid
    【解决方案3】:

    你也可以这样使用。

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

    这也将解决 SQL 注入问题。

    【讨论】:

    • ? 参数很好,只是没有String.valueOf(String) 的过载
    • 哦!对不起。实际上,它似乎是这样的 db.rawQuery("SELECT _id FROM Meeting where meet=?" , new String [] {rid});感谢您指出我的代码。
    • 很好的答案。只需要一些关于它如何帮助解决 SQL 注入问题的解释
    • 通过参数化查询,可以安全抵御sql注入攻击。例如,在您的代码中,您的查询可能看起来像“SELECT * FROM users WHERE email = '”+ txtEmail +“' AND password = '”+ txtPassword +“'”;当用户传递 txtPassword 的值时,如下所示。 (a' or 'a'='a) 你的查询看起来像 SELECT * FROM users WHERE email = 'someemail@somedomain.com' AND password = 'a' or 'a'='a' 将返回整个表,即使是密码不正确,用户可能通过这种注入方式登录。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

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

      注意'$token' 中的引号。就是这样! ?

      【讨论】:

        猜你喜欢
        • 2013-10-03
        • 1970-01-01
        • 2016-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多