我在我的一个方法中得到了这段代码。它应检查字符串是否已存在于数据库中,以及是否更新了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
我不知道我的错误在哪里。是否可以在选择参数中使用字符串?
答案 0 :(得分:2)
尝试在hallo
周围添加单引号String s = "'hallo'";
基本上你正在做的是告诉你的查询:从TABLE中选择blah blah blah,其中subject = hallo。由于hallo未被引号括起,因此它试图找到具有该名称的变量/列。当我们用引号括起来时,我们说我们正在寻找这些引号中的字符串,而不是变量。
将其视为正常编程......
String s = hallo;
与
完全不同String s = "hallo";