Android中SQLite数据库中query或者rawquery查询失败闪退问题

最近在学Android,在使用SQLite数据库的时候,出现了一个问题就是:
先说说我要实现功能: 查找数据库中是否有某个用户和密码。
最开始我是用的rawquery查询数据,看代码
查询:

Cursor cursor = db.rawQuery("select * from usertable where stuname=? and password = ?", values);

判断是否相等:

        {

            if (cursor.getString(cursor.getColumnIndex("password")).equals(psw))//密码相同
            {
                   Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG).show();

            }
            else
            {
                Toast.makeText(MainActivity.this, "密码错误", Toast.LENGTH_LONG).show();
            }
            Toast.makeText(MainActivity.this,"用户查找成功",Toast.LENGTH_LONG).show();
        }
        else if(cursor.getCount()<=0)
        {
            Toast.makeText(MainActivity.this, "没有查到该用户", Toast.LENGTH_LONG).show();
        }
        cursor.close();*/
    }
});

出现问题: 就是当输入正确的用户和密码时,可以正常显示;但是当密码或用户不匹配,就会出现闪退。

原因: 就是查询语句查询结果返回给cursor,但是查询失败的话,就直接闪退。无论你后面怎么判断,在这一步出错了,后面怎么弄都没用。

解决: 用query或者rawquery,查询所有数据,然后再对所有的数据进行判断。看代码

cursor=db.query("usertable",null,null,null,null,null,null);

//cursor是游标,query查询返回的结果
cursor.moveToFirst();//把游标异动到开头

while(1==1)
{
     
    if(cursor.getString(cursor.getColumnIndex("stuname")).equals(name))     //查找到用户名
    {
     
        Toast.makeText(MainActivity.this,"用户查找成功",Toast.LENGTH_LONG).show();
        if(cursor.getString(cursor.getColumnIndex("password")).equals(psw))   //密码相同
        {
     
            Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG).show();        
           break;
        }
        else                    //密码不同
        {
     
            Toast.makeText(MainActivity.this, "密码错误", Toast.LENGTH_LONG).show();
            break;
        }
    }
    if(cursor.isLast())//当游标到最后时,说明没有查到该数据
    {
     
        Toast.makeText(MainActivity.this, "无效用户,请注册", Toast.LENGTH_LONG).show();
        break;
    }
    cursor.moveToNext();
}

总结: query或则rawquery,查询失败,会闪退。解决方法:可以查询出所有内容,然后进行判断等操作。用moveToNext()不断的将游标后移,用isLast()方法判断是否到最后,到最后还是没有查到说明就没有该数据。
注意:具体的query怎么用可以看其他的大神的。

你可能感兴趣的:(android,sqlite,数据库)