0

データベースに挿入し、挿入されたデータを検索するシンプルなアプリを開発しています

データベースを作成し、挿入されたすべての行を確認できました...[名前]列を使用して行を検索したい

エラーが発生しましたが、エラー行がどこにあるのかわかりません

以下は、データベースを作成するための私のコードです。

sampleDB =  this.openOrCreateDatabase(SAMPLE_DB_NAME, MODE_PRIVATE, null);

sampleDB.execSQL("CREATE TABLE IF NOT EXISTS "+SAMPLE_TABLE_NAME +
                    " (Id INT(50), Name VARCHAR," +
                    " Price INT(50), Qty INT(50), Discount INT(50), Category INT(10));");

これがデータベースで検索するコードです

Button saveButton = (Button) findViewById(R.id.search_button);

        saveButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {

                String searchStr = search.getText().toString();

                Cursor c = sampleDB.rawQuery("SELECT Name, Price FROM "+SAMPLE_TABLE_NAME+" WHERE Name like '"+searchStr+"'", null);

                if (c != null ) { 
                    if  (c.moveToFirst()) {
                        do {
                            String name = c.getString(c.getColumnIndex("Name"));
                            int cat = c.getInt(c.getColumnIndex("Category"));
                            results.add("" + name + ",Age: " + cat);
                            Log.v("Fname", name);
                            Log.v("Cat", cat+"");
                        }while (c.moveToNext());
                    }
                }

            }
        });

searchStrがデータベースで検索したい名前を持っていることを知っている

これが私が抱えているエラーです

Bad request for field slot 0,-1. numRows = 18, numColumns = 2
FATAL EXCEPTION: main
java.lang.IllegalStateException: get field slot from row 0 col -1 failed

助けてください?

4

4 に答える 4

3

クエリで選択nameしているのは次のとおりです。price

Cursor c = sampleDB.rawQuery("SELECT Name, Price FROM "+SAMPLE_TABLE_NAME+" WHERE Name like '"+searchStr+"'", null);

そして、あなたはアクセスしようとしていますcategory

int cat = c.getInt(c.getColumnIndex("Category"));

したがって、selectステートメントにカテゴリを追加する必要があります。

Cursor c = sampleDB.rawQuery("SELECT Name, Price, Category FROM "+SAMPLE_TABLE_NAME+" WHERE Name like '"+searchStr+"'", null);
于 2012-10-17T10:19:02.927 に答える
2

FTSテーブルを使用します。FTSテーブルは、SELECTステートメントが正しく機能するように設計されています。==またはLIKE演算子を使用して、特定のテキスト値またはパターンを直接検索することもできます。これらは機能しますが、標準の演算子では全表スキャンが必要になるため、多少遅くなります。

FTSシステムの真の力は、カスタムMATCHオペレーターから得られます。この演算子は、個々のテキスト値を中心に構築されたインデックスを利用できるため、大量のテキストを非常に高速に検索できます。通常、検索は次のようなクエリを使用して行われます。

于 2012-10-17T10:35:03.263 に答える
1

問題はここにあります:あなたのSQLは:

SELECT Name, Price FROM 

しかし、あなたはの価値を得ていますCategory

int cat = c.getInt(c.getColumnIndex("Category")); 
于 2012-10-17T10:19:57.480 に答える
1

カテゴリフィールドにアクセスしようとしていますが、選択したクエリにカテゴリがありません。使用できるように、選択クエリに追加する必要があります。

于 2012-12-18T08:08:53.310 に答える