Android sqlite选择错误

Android sqlite选择错误,android,sqlite,Android,Sqlite,我在我的一个方法中得到了这个代码。它应该检查字符串是否已经在数据库中,以及数据库条目是否更新。如果它不在那里,我捕获异常并创建条目 String s="hallo"; try { Cursor c1 = dba.fetchSubject(s); dba.updateSubject(c1.getLong(c1.getColumnIndex(DbAdapter.KEY_ROWID)), s, t, r); } catch (SQLException e){ dba.createS

我在我的一个方法中得到了这个代码。它应该检查字符串是否已经在数据库中,以及数据库条目是否更新。如果它不在那里,我捕获异常并创建条目

String s="hallo";

try {
   Cursor c1 = dba.fetchSubject(s);
   dba.updateSubject(c1.getLong(c1.getColumnIndex(DbAdapter.KEY_ROWID)), s, t, r);
} catch (SQLException e){
   dba.createSubject(s, t, r);
}
问题是fetchSubject allway抛出了一个异常

我使用类似的方法通过rowId而不是字符串获取db条目,这是可行的:

public Cursor fetchSubject(long rowId) throws SQLException {
    Cursor mCursor = database.query(true, DATABASE_TABLE2, new String[] {
            KEY_ROWID, KEY_SUBJECT, KEY_TEACHER, KEY_ROOM}, KEY_ROWID 
            + "=" + rowId, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}
在顶部调用的方法:

public Cursor fetchSubject(String subject) throws SQLException {
    Cursor mCursor = database.query(true, DATABASE_TABLE2, new String[] {
            KEY_ROWID, KEY_SUBJECT, KEY_TEACHER, KEY_ROOM}, KEY_SUBJECT 
            + "=" + subject, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}
错误:

 sqlite returned: error code = 1, msg = no such column: hallo

我不知道我的错误在哪里。不能在选择参数处使用字符串吗?

尝试在hallo周围添加单引号

String s = "'hallo'";
基本上,您所做的是告诉您的查询:从subject=hallo的表中选择诸如此类的内容。因为hallo没有引号,所以它试图找到一个具有该名称的变量/列。当我们用引号括起来时,我们是在寻找这些引号中的字符串,而不是一个变量

把它想象成普通的编程

String s = hallo; 
完全不同于

String s = "hallo";

谢谢,成功了。我还发现了另一个错误。当字符串不在数据库中时,fetchSubject不会引发异常,它会返回一个空游标。