Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何基于其他列值(SQLiteOpenHelper)检索id值?_Java_Android_Database_Sqlite_Android Sqlite - Fatal编程技术网

Java 如何基于其他列值(SQLiteOpenHelper)检索id值?

Java 如何基于其他列值(SQLiteOpenHelper)检索id值?,java,android,database,sqlite,android-sqlite,Java,Android,Database,Sqlite,Android Sqlite,我想通过验证用户名和密码是否包含相同的id来设置登录选项。问题是我不知道如何根据它们的列值获取id值,例如-player或1234。我想得到的结果是比较它们的id值,这样我就可以知道用户名和密码是否正确。您可以使用如下查询: "SELECT * FROM " + TABLE_EMP + " WHERE " + KEY_USERNAME + " = '" + userName + "'" 假设您的用户名必须是唯一的才能获得唯一的记录。如果您想要更具体的信息,那么

我想通过验证用户名和密码是否包含相同的id来设置登录选项。问题是我不知道如何根据它们的列值获取id值,例如-player或1234。我想得到的结果是比较它们的id值,这样我就可以知道用户名和密码是否正确。

您可以使用如下查询:

"SELECT * FROM " + TABLE_EMP
                + " WHERE  " + KEY_USERNAME + " = '" + userName + "'"

假设您的用户名必须是唯一的才能获得唯一的记录。如果您想要更具体的信息,那么您也可以为密码添加一个条件。

为什么不简单地检查您的密码是否与您的用户名匹配并忘记id?

如果用户名和密码匹配

public boolean ifValidUserLogin(String username, String password) {
    SQLitedarabase db = this.getWriteableDatabase();
    Cursor csr = db.query(YOUR_TABLE_NAME,
        null,    // null equates to all columns
        "username" + "=? AND " +
            "password" + "=?", // the WHERE clause less WHERE
        new String[]{username,password}, // the arguments that replace ?'s
        null,null,null
    };
    boolean rv = (csr.getCount > 0);
    csr.close();
    return rv;
}
然后,您可能会在活动中调用此函数,其内容如下:-

MySQLiteOpenHelper myhlpr = new MySQLiteOpenhelper(this); // parms might be different
if (myhlpr.ifValidUserLogin(username_from_ui,password_from_ui)) {
    // username and password match so do what you need to do here!
} else {
    // mismatch so do what you need to do here!.
}
笔记 对SQLiteDatabase查询方法的调用等同于使用SQL SELECT*FROM表,其中username=??????密码=???表示用户输入值 _TABLE_名称应替换为字符串形式的表名。 你可能想看看 如果您想要id,则可以使用:-

public long getValidUserId(String username, String password) {
    long rv = -1; // default to mismatch and thus no id (could use 0)
    SQLitedarabase db = this.getWriteableDatabase();
    Cursor csr = db.query(YOUR_TABLE_NAME,
        null,    // null equates to all columns
        "username" + "=? AND " +
            "password" + "=?", // the WHERE clause less WHERE
        new String[]{username,password}, // the arguments that replace ?'s
        null,null,null
    };
    if (csr.moveToFirst) {
        rv = csr.getLong(csr.getColumnIndex("YOUR_ID_COLUMNNAME"));
    }
    csr.close();
    return rv;
}
显然,您需要调用getValidUserId并检查值>-1是否匹配。
你用的是什么数据库@MaayankaidarSqliteOpenHelper您应该学习SQL基础知识:选择用户名='player'和密码='1234'的ID我不是用SQL编程,而是用SQLite,我认为它有点混合了java,所以我不能只键入您所说的,如果我错了,请纠正我。MaayanKaidar SQLite使用SQL作为其quey语言。这就是SQL在SQLite名称中的含义。您可以看看这个来学习sqllite