-1

我有一个包含用户的数据库,每个用户都有一个角色。U 代表用户,A 代表管理员。我在名为 getRole() 的类中有一个方法,它获取用户广告的角色,将其作为字符串返回。在另一个类中,我调用此方法,将其结果保存到字符串,然后测试该字符串。如果是 A(管理员),则继续。问题是字符串返回 A,但程序没有继续。这里有什么问题?

getRole() 方法:

public String getRole() throws SQLException {

    userid = "c##lambros";
    password = "16111111";
    jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";
    conn = DriverManager.getConnection(jdbcUrl, userid, password);
    checkRole = "SELECT role FROM users where username = '" + usernameF.getText() + "' AND password = '" + passwordF.getText() + "' ";
    System.out.println(checkRole);
    stmt = conn.createStatement();
    rset = stmt.executeQuery(checkRole);
    while (rset.next()){
    role = rset.getString(1);
    System.out.println("The User's Role is " + role);
    }
     return role;
    }

IF 声明:

    Login login = new Login();
    TermResultsFromDB terms = new TermResultsFromDB();
    String role;
    try {

        role = login.getRole();
        System.out.println(role);

        if(role=="A"){
        terms.getTerms(query);
        terms.setVisible(true);
        terms.setLocation(z, y);
        terms.pack();
        }

        else if (role!="A")
            System.out.println("Sorry! Not sufficient Privileges!");

    } catch (SQLException f) {
    }
4

3 回答 3

2

==运算符比较引用,因此

role == "A"

将始终返回false,因为role它是与 不同的对象"A"。相反,equals用来比较你的Strings.-

if("A".equals(role)) {

...

else if (!"A".equals(role)) {

更多关于比较字符串的信息

于 2013-10-08T21:23:46.133 回答
0

我认为可能是因为区分大小写。

所以你可以使用

if(role.equalsIgnoreCase("A"))
{
 //
}
else if(role.equalsIgnoreCase("A"))
{
 //
}
于 2013-10-08T21:29:11.847 回答
0

首先检查角色变量中的字符串 A 是否为大写?如果没有,那么使用这个

if(role.toUpperCase().equals("A")) {
// statement
} else {
// statement
}
于 2013-10-08T21:35:16.323 回答