最近在学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怎么用可以看其他的大神的。

更多相关文章

  1. Android用户界面(三):线性布局…
  2. android用户界面之Notification教程实例汇总
  3. Android之用户定位(一)
  4. Android Things:用户驱动-传感器

随机推荐

  1. Mac下完全卸载干净Android(安卓)Studio的
  2. AS插件-Android(安卓)Layout ID Converte
  3. Android中Context和Resource之间的关系
  4. Android使用代码实现左右半圆的按钮背景
  5. Android(安卓)SDK与ADT版本不匹配的解决
  6. Android开发手记——登陆界面
  7. Android(8) RecyclerView适配器实现多布
  8. android有用代码片段(一)
  9. Android_MediaPlayer:java.io.IOException
  10. Android(安卓)四种加载方式详解(standard