sqlite选择错误

时间:2011-08-18 13:08:46

标签: android sqlite

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

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总是引发异常。

我使用类似的方法通过rowId而不是String来获取数据库条目,这是有效的:

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

我不知道我的错误在哪里。是否可以在选择参数中使用字符串?

1 个答案:

答案 0 :(得分:2)

尝试在hallo

周围添加单引号
String s = "'hallo'";

基本上你正在做的是告诉你的查询:从TABLE中选择blah blah blah,其中subject = hallo。由于hallo未被引号括起,因此它试图找到具有该名称的变量/列。当我们用引号括起来时,我们说我们正在寻找这些引号中的字符串,而不是变量。

将其视为正常编程......

String s = hallo; 

完全不同
String s = "hallo";