mysql 如何将SQL结果存储在要使用的变量中[已关闭]

omvjsjqw  于 2023-10-15  发布在  Mysql
关注(0)|答案(1)|浏览(76)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
关闭7天前。
Improve this question
大家好
我正在做一个java项目,用netbeans。我有一个名为dbcon的类,它有一堆方法和一个连接到Mysql数据库的构造函数。一个这样的方法是login方法,它接收2个参数:用户名和密码使用SQL搜索数据库并将结果存储在结果集中。然后我继续使用getString检索存储的数据并将其存储在一个String变量中。但是,它返回空值。表中用户名和密码的数据类型都是varchar(45)。我之前已经得到了mem_id值,并且能够正确地使用它执行插入,但是字符串类型有问题。此外,成员变量susername也返回null,即使我直接从传递的变量username存储它。

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;
    }

谢谢

iyfjxgzm

iyfjxgzm1#

第二次调用dbuser.next()是让结果集前进,这样if主体就不会进入,你不需要这样,只需要把if移到另一个里面。
比如:

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注入攻击,并且不需要执行三个查询,你可以用一个和一个连接来完成。

相关问题