我想从相应的用户名中从数据库中检索密码,但是我做不到

时间:2019-06-11 14:37:30

标签: android android-sqlite

我基本上想使用Login_table中的查询选择密码,其中username ='this will be given by the user';

Cursor res =db.rawQuery("select password from Login_table where username ='"+x+"'",null);

我猜这是对的,但仍然有问题

  

android.database.CursorIndexOutOfBoundsException:已请求索引-1,   大小为2

public void checkData(){
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String user_name=usname.getText().toString();
                Cursor res =mydb.getData(user_name);
                if(res.getCount()==0){
                    Toast.makeText(MainActivity.this,"Login failed",Toast.LENGTH_SHORT);
                }
                String check=res.getString(2);
                Toast.makeText(MainActivity.this,String.valueOf(check),Toast.LENGTH_SHORT).show();
                String pass_Word=pass.getText().toString();

                if(pass_Word.compareTo(check)==0){
                    Toast.makeText(MainActivity.this,"You are Loged IN",Toast.LENGTH_LONG).show();
                }
                else
                    Toast.makeTextenter code here(MainActivity.this,"You are Not Loged IN",Toast.LENGTH_SHORT).show();

            }
        });
    }

我只想获取密码并检查用户输入enter code here

1 个答案:

答案 0 :(得分:1)

使索引超出范围的原因是,您尝试从第一行之前(即-1)的位置读取数据。您必须移动到行中才能从行中读取数据。

因此,在String check=res.getString(2);行之前,您需要移至一行,可能使用Cursor的 moveToFirst 方法(尽管根据消息返回了两行,这是您遇到的问题)可能要解决,因为似乎同一用户有两行,也许还有2个不同的密码。

moveToFirst 方法返回一个布尔值, true ,如果可以进行移动,否则为false,则无需检查是否存在任何行好像没有,那么 moveToFirst 将返回false。

尽管目前可能不是问题。完成操作后,还应该始终关闭游标。

因此,您不妨尝试使用:-

public void checkData(){
    final DBAssetHelper mydb;
    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String user_name=usname.getText().toString();
            Cursor res =mydb.getData(user_name);
            if (res.moveToFirst()) { //<<<<<<<<<< try to move to a row
                Toast.makeText(MainActivity.this,"Login failed", Toast.LENGTH_SHORT);
            } else {
                if (res.getString(2).equals(pass.getText().toString)) {
                    Toast.makeText(MainActivity.this,"You are Loged IN",Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(MainActivity.this,"You are Not Loged IN",Toast.LENGTH_SHORT).show();
                }
            }
            res.close(); //<<<<<<<<<< Close the Cursor
        }
    });
}