[英]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.