2

テキストビューの文字列に基づいて、データベースから特定の行を選択しようとしています。実行したときのエラーログには、列を検索しているように見えますが、行を検索しているはずです。エラーログには次のように記載されています。

    --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

これは、テキストビューから文字列を取得し、テキスト文字列の形式でファイル名を返すことになっているメソッドを実行し、返された文字列を2番目のテキストビューに表示するコードです。

                String bkString = showBooktextview.getText().toString();
            bga.open();
            String newBKstring = bga.getBGforBook(bkString);
            bga.close();                
            showDBBooktextview.setText(newBKstring);

これが、その本の名前の列がないというエラーの方法です。(その本の名前を含む行を探すことになっています):

        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;
    }

それで、メソッドは間違って書かれていますか?もしそうなら、それが本名の文字列を含む行を探すようにそれを正しく書く方法は?

4

1 に答える 1

7

条件式に一重引用符がないと思います:

KEY_BOOK + "=" + bkString

する必要があります

KEY_BOOK + "='" + bkString + "'"

文字列は引用符で囲まれていないため、SQLite はそれを列名bkStringの識別子として解釈しようとします。

于 2012-06-12T21:13:40.933 に答える