0

我正在开发一个简单的应用程序,它插入数据库并在插入的数据中搜索

我创建了数据库,我可以看到插入的所有行...我想使用 Name 列搜索行

我有一个错误,我不知道错误行在哪里

下面是我创建数据库的代码。

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

您只选择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);
于 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 回答