-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"equalsStrings

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 に答える