Java android.database.sqlite.SQLiteException:没有这样的列
当我执行这个查询时,我得到了“android.database.sqlite.SQLiteException:no-this column”错误是什么Java android.database.sqlite.SQLiteException:没有这样的列,java,android,xml,sqlite,Java,Android,Xml,Sqlite,当我执行这个查询时,我得到了“android.database.sqlite.SQLiteException:no-this column”错误是什么 public Cursor Getupdate(String rid) throws SQLException { Cursor m1Cursor = db.rawQuery("SELECT _id FROM Meeting where meet="+rid , null); if (m1Cursor !
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
在Where子句检查中需要使用撇号(')。。像
db.rawQuery("SELECT _id FROM Meeting where meet='"+rid+"'" , null);
或者,更好的方法是使用PreparedStatement并绑定变量。它将为您正确转义字符串和日期。它还可以帮助解决SQL注入问题。对于字符串数据类型,请始终使用类似以下的引号:“+rid+””,因为rid是字符串,所以会出现错误
只有当rid为int时,才应使用+rid。您也可以这样使用
db.rawQuery("SELECT _id FROM Meeting where meet=?" ,
new String [] {rid});
这也将解决SQL注入问题。只需使用单引号('
)
如果上面的答案仍然不清楚,就用单引号括住where子句
例如:db.update(TABLE_USER,contentValues,“$KEY_TOKEN='${TOKEN}',null)
注意,
“$token”
中的引号。就是这样!?
参数很好,只是没有超负荷的字符串。valueOf(String)
哦!对不起。实际上,它看起来像是db.rawQuery(“选择_idfrom Meeting where meet=?”,新字符串[]{rid});感谢您对我的代码的指点。回答得很好。只需要解释一下它如何帮助解决SQL注入问题。通过使用参数化查询,它可以安全地抵御SQL注入攻击。例如,在您的代码中,您的查询可能看起来像“SELECT*FROM users WHERE=”“+txtEmail+””和password=”“+txtPassword+”;当用户传递txtPassword的值时,如下所示。(a'或'a'='a)您的查询将类似于从电子邮件地址为的用户处选择*someemail@somedomain.com'和password='a'或'a'='a'将返回整个表,即使密码不正确,用户也可能通过这种注入通过登录。您救了我!亲爱的!!展示得很好。现在,如果rid是一个int数据类型呢?我是否会将其写为“SELECT _idfrom Meeting where meet=“+rid”