2

特定のクラスのすべての関数で使用できる DB フィールド型の列挙を宣言するのに問題があります。次のコードでは、「USERNAME を変数型に解決できません」というメッセージが表示されます。

public class SQL_access {

    public enum DBfields { BLANK, USERNAME, ID, PASSWORD, FIRSTNAME, LASTNAME }; 

    public boolean loginValidate( String username, String password ){

        String DBuser, DBpass;
        PreparedStatement table = connectToTable( "firstsql", "users");
        ResultSet row = table.executeQuery();;

        while(row.next()){
            DBuser = row.getString(USERNAME);
            if(DBuser.equals(username)){
                DBpass = row.getString(PASSWORD);
                break;
            }
        }
    }
};
4

8 に答える 8

6

を使用する必要がありますDBfields.USERNAME

アップデート:

メソッドで使用するには、次getString(String)のような列挙型の名前を使用する必要がありますDbfields.USERNAME.name()

jdbc API アクセスのみに列挙型を使用している場合は、String 定数を使用する方がよいでしょう。

public static final String DBFIELD_USERNAME = "USERNAME";
于 2012-07-13T14:30:14.520 に答える
3

列挙型を参照する必要があります:DBfields.USERNAME、または次のように列挙型を静的にインポートします:

import static mypackage.SQL_access.DBfields.*;

また、あなたの場合、これは十分ではありません。String列名--a-または列位置--a--intResultSet:に渡す必要があります。

row.getString(DBfields.USERNAME.name());

このように使用すると、静的な性質である列挙型の主な利点が失われますが、これらの値を「バッグ」と呼ぶと、コード内の他の場所でも役立つ可能性があります。

于 2012-07-13T14:38:47.590 に答える
1

を使用して列挙型にアクセスする必要がありますDBfields.USERNAME

詳細は、OracleDocsを参照してください。

于 2012-07-13T14:30:34.807 に答える
1

列挙型を列挙型で修飾してみてください。

   while(row.next()){
        DBuser = row.getString( DBfields.USERNAME);
        if(DBuser.equals(username)){
            DBpass = row.getString( DBfields.PASSWORD);
            break;
        }
    }
于 2012-07-13T14:30:39.517 に答える
1

列挙型を参照する場合、それは常にEnumName.Fieldの形式になります。あなたの例では、次のものが必要です。

DBUser = row.getString(DBfields.USERNAME);  
DBpass=row.getString(DBfields.PASSWORD);
于 2012-07-13T14:30:45.413 に答える
1

enumbs にアクセスするには を使用しますDBfields.USERNAMEが、これは役に立ちません。bacuse row.getString() には引数として int が必要です。Enumbs は int ではなく Type DBFields です。を使用public static final int USERNAME = the int value here;して呼び出しますrow.getString(USERNAME);

于 2012-07-13T14:33:24.370 に答える
0

間違っenumた方法です。usingを呼び出す必要がありますDBfields.PASSWORD

于 2012-07-13T14:31:40.300 に答える
0

次のように呼び出す必要があります。DBfields.PASSWORD

于 2012-07-13T14:35:29.660 に答える