我正在尝试根据textview中的字符串从数据库中选择一个特定的行。我运行它时的错误日志似乎表明它正在寻找一个列,但它应该寻找一行。错误日志显示:
--I/Database(279): sqlite returned: error code = 1, msg = no such column: Book
--D/AndroidRuntime(279): Shutting down VM
--W/dalvikvm(279): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
--E/AndroidRuntime(279): FATAL EXCEPTION: main
--E/AndroidRuntime(279): android.database.sqlite.SQLiteException: no such column: Book: , while compiling: SELECT book, background FROM bookbackgrounds WHERE book=Book
以下是从textview获取字符串的代码,然后运行一个应该以文本字符串形式返回文件名的方法,然后在第二个textview中显示返回的字符串:
String bkString = showBooktextview.getText().toString();
bga.open();
String newBKstring = bga.getBGforBook(bkString);
bga.close();
showDBBooktextview.setText(newBKstring);
这里的错误说明没有这样一个列有该书名称的方法。 (它应该是在寻找包含该书名的ROW):
public String getBGforBook(String bkString) {
String[] thecolumns = new String[] { KEY_BOOK, KEY_BACKGROUND };
Cursor cursor = db.query(DB_TABLE, thecolumns, KEY_BOOK + "=" + bkString, null, null, null, null);
String result = "";
if (cursor != null){
cursor.moveToFirst();
result = result
+ cursor.getString(1);
}
return null;
}
方法写得不正确吗?如果是这样,如何正确编写它以查找包含bookname字符串的行?
答案 0 :(得分:6)
我认为你在条件表达式中缺少单引号:
KEY_BOOK + "=" + bkString
应该是
KEY_BOOK + "='" + bkString + "'"
由于未引用字符串bkString
,SQLite会尝试将其解释为列名称的标识符。