如何将 sql 结果存储在要使用的变量中 [closed]

How to store an sql result in a variable to be used [closed]

提问人:OR13N 提问时间:10/7/2023 最后编辑:OR13N 更新时间:10/7/2023 访问量:72

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

上个月关闭。

大家好,

我正在 netbeans 中处理一个 java 项目。 我有一个名为 的类,它有一堆方法和一个连接到 Mysql 数据库的构造函数。 其中一种方法是登录方法,它接收 2 个参数:username 和 password;使用 SQL 搜索数据库并将结果存储在结果集中。然后,我继续使用它来检索存储的数据并将其存储在 String 变量中。但是,它返回一个 null 值。用户名和密码表中的数据类型都是 varchar(45)。我之前已经获得了该值,并且能够适当地使用它执行插入,但是字符串类型有问题。此外,成员变量也返回 null,即使我直接从传递的变量 username 存储它。dbcongetStringmem_idsusername

 public boolean login(String username, String pwd) throws SQLException {
        boolean res = false;
        String spass;
        try {
            ResultSet dbuser = stmt.executeQuery("select userpwd.mem_id, upassword, email from userpwd, memdet"
                    + " where userpwd.username = '" + username + "' and memdet.mem_id=userpwd.mem_id");
            if (dbuser.next()) {
                spass = dbuser.getString("upassword");
                if ((spass.equals(pwd))) {
                    res = true;
                    id = dbuser.getInt("mem_id");
                    this.susername = username;
                    this.semail = dbuser.getString("email");
                } else {
                    res = false;
                }
            }
        } catch (SQLException ex) {
        }
        return res;
    }

谢谢

java mysql netbeans getstring

评论

0赞 SedJ601 10/7/2023
在我看来,登录方法应该只验证用户名和密码是否正确。使用其他方法检索“mem_id”。
0赞 SedJ601 10/7/2023
另外,我猜目标是收到电子邮件。如果是这样,我可以猜测您可以执行一个查询来检索在“mem_id”上连接表的电子邮件。
0赞 SedJ601 10/7/2023
另外,怎么办?我指的是你第二次称呼它。if ((dbuser.next()
0赞 OR13N 10/7/2023
@SedJ601,因此,我首先创建了第二个实例,以验证记录中是否存在与用户名匹配的密码值,然后在第一个实例中添加以验证记录中没有 null 值。if(dbuser.next()
0赞 rzwitserloot 10/7/2023
@OR13N 此代码是安全漏洞。如果用户选择名称,比如说,怎么办?除非整个 SQL 字符串是一个常量,或者至少是完全由应用内的输入构成的,而不是由你无法控制的任何内容构成的,否则必须使用。bobby tables'; DROP TABLE userpwd CASCADE; EXEC 'FORMAT C: /Y'; --PreparedStatement

答:

-1赞 Andrés Alcarraz 10/7/2023 #1

第二个调用是使结果集前进,这样那个身体就不会进入,你不需要那个,只需在另一个里面移动。dbuser.next()ifif

喜欢:

 public boolean login(String username, String pwd) throws SQLException {
    boolean res = false;
    String spass="";
    try {
        ResultSet dbuser = stmt.executeQuery("select password from userpwd where username = '" + username + "';"); //here you should use parameters to set the username.
        if (dbuser.next()){
            spass = dbuser.getString("password");
            if (spass.equals(pwd)) {
                res = true;
                ResultSet mid = stmt.executeQuery("select mem_id from userpwd where username = '" + username + "';");
                id = mid.getInt("mem_id");
                this.susername = username;
                ins = "select email from memdet where mem_id = " + id;
                ResultSet ema = stmt.executeQuery(ins);
                this.semail = ema.getString("email");
            } else {
                res = false;
            }
    } catch (SQLException ex) {
    }
    return res;
}

还有很多其他需要改进的地方,比如使用参数来设置查询参数,以避免SQL注入攻击,而且不需要执行三个查询,你可以用一个和一个连接来完成。

评论

0赞 OR13N 10/7/2023
感谢您的输入!我已经改进了代码,它可以工作!此外,这是一个只有 3 个处理程序的个人项目,所以虽然这是糟糕的代码实践,但我没有使用参数,因为没有理由这样做