簡體   English   中英

Java枚舉用於跨類

[英]Java enum for use across class

我無法聲明我可以在特定類的所有函數中使用的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;
            }
        }
    }
};

您需要使用DBfields.USERNAME

更新:

為了與getString(String)方法一起使用,您需要使用枚舉的名稱,如: Dbfields.USERNAME.name()

如果您僅使用枚舉進行jdbc API訪問,那么最好只使用String常量:

public static final String DBFIELD_USERNAME = "USERNAME";

您需要引用枚舉類型: DBfields.USERNAME ,或靜態導入枚舉,如:

import static mypackage.SQL_access.DBfields.*;

另外,在您的情況下,這還不夠。 您需要將列名稱 - String - 或列位置 - int - 傳遞給ResultSet

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

像這樣使用,你失去了枚舉的主要優點,這是它的靜態特性,但如果你將這些值稱為“包”,它仍然可以在代碼中的其他地方使用。

您應該使用DBfields.USERNAME訪問枚舉。

有關更多信息,請參閱Oracle Docs

嘗試使用枚舉類型限定枚舉器:

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

引用枚舉時,它始終采用此形式EnumName.Field。 在您的示例中,您需要以下內容:

DBUser = row.getString(DBfields.USERNAME);  
DBpass=row.getString(DBfields.PASSWORD);

訪問你的enumbs使用DBfields.USERNAME ,但這對你沒有幫助,bacuse row.getString()需要一個int作為參數。 你的Enumbs屬於Type DBFields而不是int。 更好地使用public static final int USERNAME = the int value here; 並使用row.getString(USERNAME);調用row.getString(USERNAME);

錯誤的方式。你需要使用DBfields.PASSWORD調用enum

你需要像這樣調用: DBfields.PASSWORD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM