2012-10-17 81 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

是的,我实际上发现了这个愚蠢的错误,我做了:)非常感谢你的帮助 –