我根据dept对员工进行排序的查询是
public Cursor fetchDept(String dept)throws SQLException
{
Cursor c=mDb.query(DATABASE_TABLE, new String[] {KEY_NAME,KEY_DESGN,KEY_PHONE}, KEY_DEPT + "=" ,new String[]{dept}, null, null, null, KEY_DEPT);
if (c!= null) {
c.moveToFirst();
}
return c;
}
我已将活动类的值传递给此查询,如此
{
db.open();
Cursor c=db.fetchDept(dept);
if (c!= null) {
c.moveToFirst();
do
{
if(dept.equals(c.getString(3)))
{
Toast.makeText(this,"found",Toast.LENGTH_LONG).show();
return;
}
//c.getString(1) +c.getString(2)+ c.getString(4)
else
{
Toast.makeText(this,"No dept",Toast.LENGTH_LONG).show();
return ;
}
}while(c.moveToNext());
}
运行此应用程序时强行关闭。如果有人可以帮助请帮忙! 是传递参数,在上面调用db.query是正确的吗?
答案 0 :(得分:1)
你还没有发布LogCat,但有一些事情突然发生在我身上:
首先,如果您使用whereArgs
参数,则需要使用?
替换字符:
Cursor c=mDb.query(DATABASE_TABLE, new String[] {KEY_NAME,KEY_DESGN,KEY_PHONE},
KEY_DEPT + "=?", new String[]{dept}, null, null, null, KEY_DEPT);
// You forgot this: ^
(小点:您只需要一个KEY_DEPT
,因此按KEY_DEPT
排序结果无效。)
其次,您要求第四个列:
dept.equals(c.getString(3))
但您的Cursor只有三列:
new String[] {KEY_NAME,KEY_DESGN,KEY_PHONE}
// Columns: 0 , 1 , 2 , no column 3
第三, SQLiteDatabase#query()将始终返回一个Cursor。此Cursor可能为空但它不是null
。此外,您的查询仅返回KEY_DEPT
等于dept
的结果,因此您无需再次检查...请尝试使用此代码:
db.open();
Cursor c=db.fetchDept(dept);
// Check any rows that were returned
if(c.getCount() > 0) {
Toast.makeText(this,"found "+c.getCount()+" matches",Toast.LENGTH_LONG).show();
while (c.moveToNext()) {
// Do something extra with each result
}
}
// The Cursor is empty (No departments does not exist with the name in dept)
else {
Toast.makeText(this,"No dept",Toast.LENGTH_LONG).show();
}
(完成后别忘了关闭光标和数据库!)