【问题标题】:Finding if a entered value exists in a table查找输入的值是否存在于表中
【发布时间】:2012-06-13 02:33:31
【问题描述】:

我正在尝试查找用户名是否存在于数据库中,如果存在,则布尔变量将设置为 true,否则将设置为 false。即使表中不存在用户名,该变量似乎也始终设置为 true。我检查了表中的数据并尝试了很多次,但变量始终设置为 true,并且无论用户名是否在数据库中,始终显示消息“用户名存在”。这是我的代码。我做错了什么?

----定义按钮和编辑文本字段并在单击登录按钮时触发消息的登录类-------------

public class Login extends Activity{
Button sqllogin;
EditText sqlusername, sqlpassword;

 @Override
    protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    sqlusername = (EditText) findViewById(R.id.etuname1);
    sqlpassword = (EditText) findViewById(R.id.etpass);


    sqllogin = (Button) findViewById(R.id.bLogin);
    sqllogin.setOnClickListener(new View.OnClickListener() {

            //Method that fires a message when the Login button is clicked

        public void onClick(View v) {
            switch (v.getId()){
            case R.id.bLogin:
            String username = sqlusername.getText().toString();
            String password = sqlpassword.getText().toString();

            DBAdapter entry = new DBAdapter(Login.this); 
            entry.open();
            boolean r = entry.findUsername(username);
            if(r == true){
                Toast.makeText(Login.this, "Username Exists", Toast.LENGTH_LONG).show();
            }
            else{
                Toast.makeText(Login.this, "Username does not Exists", Toast.LENGTH_LONG).show();
            }
            entry.close();
            break;
        }
      }
    });
 }
 }

---------DBAdpater 类中检查用户名是否存在于表中的方法------------

public boolean findUsername(String username) {
Cursor c = ourDatabase.query(true, DATABASE_TABLE_L, new String[] {
        KEY_USERNAME, KEY_PASSWORD}, KEY_USERNAME + "='"
        + username +"'", null, null, null, null, null);
if (c!= null) {
    return false;
}
else{
    return false;
}
}

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    不要检查游标是否为空,而是尝试检查游标是否包含任何数据,例如:

    if(cursor.getCount()!=0)
       return false;
    else
       return true;
    

    getCount() 返回查询返回的行数。

    【讨论】:

    • return (cursor.getCount() == 0)为简单起见
    • 我相信它会在编译时被优化,所以如果另一个更容易理解,那么它应该没关系
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多