如何从搜索中获取布尔结果 - SQLite数据库

时间:2016-03-09 11:22:22

标签: java android sqlite

美好的一天,我总是使用getString()getInt()来获得结果。我正在做一个简单的搜索,如果找到它我想得到一个布尔结果。

这是我的示例代码: ForgotPassword.java

 @Override
public void onClick(View v) {

    String strUserForget = edtForgotPassword.getText().toString().trim();

    switch (v.getId()){
        case R.id.buttonSubmit:

            if (strUserForget.matches("")){
                Toast.makeText(ForgotPasswordActivity.this, "Please Provide Complete Info", Toast.LENGTH_LONG).show();
            }else {
                //String forgetPassProject = "";
                Cursor cursor = (registerDatabase.getSingleRecordForgetPass(strUserForget));
                boolean value = (cursor.getInt(registerDatabase.ID) == 1);

                Toast.makeText(ForgotPasswordActivity.this, "Your password is: " , Toast.LENGTH_LONG).show();
            }
            break;

        case R.id.buttonGoBackWelcome:
            startActivity( new Intent(getApplicationContext(),WelcomeActivity.class));
            finish();
            break;
    }

}

对于registerSQLDatabase.java

public Cursor getSingleRecordForgetPass(String username){

    String querySingleRecord = "SELECT * FROM " + DB_TABLE + "WHERE = " +FULL_NAME+ "LIKE" +username ;
    return  sqLiteDatabase.rawQuery(querySingleRecord,null);
}

布尔值=(cursor.getInt(registerDatabase.ID)> 0);是不相容的。

1 个答案:

答案 0 :(得分:1)

boolean value = (cursor.getInt(registerDatabase.ID) == 1);使得NPE因为没有结果,为了避免此异常使用Objects.equals并检查Cursor的结果数量:

if (!Objects.equals(cursor, null) && cursor.getCount() > 0) {
    // has results
} else {
    // has NO results
}

之前的java 1.7:

if (cursor != null && cursor.getCount() > 0) {
    // has results
} else {
    // has NO results
}

作为一个辅助问题,正如Rohit5k2所指出的那样,您的查询中存在不必要的=

String querySingleRecord = 
    "SELECT * FROM " + DB_TABLE + " WHERE " + FULL_NAME + " LIKE " + username ;

如果您不需要Cursor信息,只需创建一个返回布尔值的方法:

public boolean existsUser(String username)
{
    String querySingleRecord = "SELECT * FROM " + DB_TABLE + "WHERE " +FULL_NAME+ "LIKE" +username ;
    Cursor cursor = sqLiteDatabase.rawQuery(querySingleRecord,null);

    // now you have the results, DON'T return them, just check if contains
    // > Java 7: if (!Objects.equals(cursor, null) && cursor.getCount() > 0) {
    if (cursor != null && cursor.getCount() > 0) {
        return true;
    }

    return false;
}

以这种方式使用它:

if (strUserForget.matches("")){
    Toast.makeText(ForgotPasswordActivity.this, "Username cannot be empty.", Toast.LENGTH_LONG).show();
} else if (registerDatabase.existsUser(strUserForget)) {
    Toast.makeText(ForgotPasswordActivity.this, "Your password is: " , Toast.LENGTH_LONG).show();
} else {
    Toast.makeText(ForgotPasswordActivity.this, "User does not exists" , Toast.LENGTH_LONG).show();
}