此android语句显示sqlite错误

此android语句显示sqlite错误,android,Android,这不起作用,请帮助我,我已经尝试了很多,但不明白哪里错了如果temp是一个字符串,你必须添加”: int pos=spinner1.getSelectedItemPosition(); String temp=(String)spinner1.getItemAtPosition(pos); db = openOrCreateDatabase("MY_App_Data", MODE_PRIVATE, null); Conten

这不起作用,请帮助我,我已经尝试了很多,但不明白哪里错了如果
temp
是一个字符串,你必须添加

int pos=spinner1.getSelectedItemPosition();
            String temp=(String)spinner1.getItemAtPosition(pos);
            db = openOrCreateDatabase("MY_App_Data", MODE_PRIVATE, null);
            ContentValues cvUpdate=new ContentValues();
            cvUpdate.put("msg",msg.getText().toString());
            try
            {

            //public int update (String table, ContentValues values, String whereClause, String[] whereArgs) 

            db.update("MY_TABLE",cvUpdate,"column_one="+temp+, null);

            readdata();//method call
            }
            catch (Exception e) 
            {
                Toast.makeText(this, "No row found!!!", Toast.LENGTH_SHORT).show();
            }
如果temp是一个数字,则至少应省略
+

db.update("MY_TABLE", cvUpdate, "column_one='" +temp +"'", null);
p.s.最佳选择是使用事先准备好的报表:

db.update("MY_TABLE", cvUpdate, "column_one=" +temp, null);
这允许绑定正确的类型,从而有助于避免不必要的类型转换。如果有很多更新,请考虑打开和关闭事务(见和)。这对运行时性能有很大影响。

这是您的问题:

SQLiteStatement st = db.compileStatement(
                    "UPDATE MY_TABLE SET msg = ? WHERE column_one = ?"); 

st.bindString(1, msg.getText().toString()); 
st.bindString(2, temp); 

st.execute();
您正在将列的值(及其字符串)直接添加到语句中,但方式不正确。因为要直接为列添加值,所以必须将它们用单引号括起来,否则SQLite会将其解释为下一列(不存在)。还有一个加号

因此,它应该是:

b.update("MY_TABLE",cvUpdate,"column_one="+temp+, null);
建议: 通常建议使用参数化语句,因为原始语句不安全,也不便于人阅读。通常推荐这种做法。所以可以这样重写:

b.update("MY_TABLE", cvUpdate, "column_one = '" + temp + "'", null);

在某些类中将列名存储为常量也是一种很好的做法。您将避免类型问题(这是非常著名的)。

请注意,
的值wherergs
被绑定为字符串。这可能会导致不需要的隐式类型转换。最好是使用准备好的语句-1进行捕获,而不记录完整的stacktrace,从而在没有stacktrace的情况下发布错误。
b.update("MY_TABLE", cvUpdate, "column_one = ?", new String[] {temp});