2012-10-17 79 views
0

我開發一個簡單的應用程序,在數據庫中插入和檢索中插入的數據安卓:SQLite的搜索

我創建的數據庫,我可以看到所有的行插入...我要搜索使用的行名稱列

我有一個錯誤,我不知道哪裏是錯誤行

下面是我的代碼來創建數據庫。

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 

請幫忙嗎?

回答

3

你只選擇nameprice查詢:

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); 
+0

非常感謝你......愚蠢的錯誤:) –

1

問題在這裏: 您的SQL是:

SELECT Name, Price FROM 

但你得到Category

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

使用FTS表的價值。 FTS表的設計使任何SELECT語句都能正常工作。您甚至可以直接使用==或LIKE運算符搜索特定的文本值或模式。這些將會起作用,儘管它們會稍微慢一些,因爲標準的操作符會需要全表掃描。

FTS系統的實力來自於一個自定義的MATCH運算符。該運算符能夠利用圍繞單個文本值構建的索引,從而可以快速搜索大量文本。通常,使用類似於以下查詢進行搜索:

2

您正在嘗試訪問類別字段,但在您的選擇查詢中,沒有類別。您必須將其添加到您的選擇查詢中,以便您可以使用它。

+1

是的,我實際上發現了這個愚蠢的錯誤,我做了:)非常感謝你的幫助 –