【问题标题】:How To Get A Boolean Result From Search - SQLite Database [duplicate]如何从搜索中获取布尔结果 - SQLite 数据库 [重复]
【发布时间】:2016-06-23 17:52:52
【问题描述】:

美好的一天,我总是使用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?
  • 只有一个。单品。
  • 我怎样才能使它正确?我通过“strUserForget” - (registerDatabase.getSingleRecordForgetPass(strUserForget));

标签: java android sqlite


【解决方案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();
}

【讨论】:

  • 我的API是15,“equals()”的等效java代码是什么?
  • 检查我的更新,只需使用cursor != null
  • 谢谢,我试试这个。 - if(registerDatabase.existsUser(strUserForget) == true){ Toast.makeText(ForgotPasswordActivity.this, "用户存在" , Toast.LENGTH_LONG).show(); }
  • if(registerDatabase.existsUser(strUserForget) == true)if(registerDatabase.existsUser(strUserForget)){ 相同
  • 我得到了一个空指针异常。我只想问我的这行代码 - String querySingleRecord = "SELECT * FROM " + DB_TABLE + "WHERE = " +FULL_NAME+ "LIKE" +username ;返回 sqLiteDatabase.rawQuery(querySingleRecord,null);如果找到,这将返回 true 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2017-01-18
  • 2020-06-27
相关资源
最近更新 更多