我正在开发一个简单的应用程序,它插入数据库并在插入的数据中搜索
我创建了数据库,我可以看到插入的所有行...我想使用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
有什么帮助吗?
答案 0 :(得分: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);
答案 1 :(得分:2)
使用FTS表。设计FTS表以便任何SELECT语句都能正常工作。您甚至可以使用==或LIKE运算符直接搜索特定的文本值或模式。虽然标准操作员需要全表扫描,但它们会有些缓慢。
FTS系统的真正力量来自定制的MATCH运算符。此运算符能够利用围绕单个文本值构建的索引,从而允许对大量文本进行快速搜索。通常,使用类似于以下的查询进行搜索:
答案 2 :(得分:1)
问题在这里: 你的SQL是:
SELECT Name, Price FROM
但是你获得了Category
int cat = c.getInt(c.getColumnIndex("Category"));
答案 3 :(得分:1)
您正尝试访问类别字段,但在您的选择查询中,没有类别。您必须在选择查询中添加它才能使用它。