2016-04-23 42 views
0

我想用OAuth2爲我的應用程序在JAVA中創建一個登錄系統。 但首先我必須創建一個帳戶並插入到我的數據庫中。在Postgresql中插入枚舉的問題

這是我的枚舉表:

CREATE TYPE userRole AS ENUM ('ADMIN'); 

這是我的用戶表:

CREATE TABLE "users" 
(
    user_id SERIAL PRIMARY KEY NOT NULL, 
    user_email VARCHAR(255) NOT NULL, 
    user_password VARCHAR(255) NOT NULL, 
    user_role userRole 
); 
CREATE UNIQUE INDEX user_user_email_uindex ON "user" (user_email); 

此應用程序使用dropwizard連同DBI數據庫連接。 當我運行我的代碼和執行我的SQL查詢,則應用程序將引發500錯誤與下面的消息:

The column index is out of range: 3, number of columns: 2.

Exception while binding 'userRole'

這是我的模型(用戶)的結構:

@JsonCreator 
public User(@JsonProperty("userEmail") String userEmail, @JsonProperty("userPassword") String userPassword, @JsonProperty("userRole") UserRole userRole) { 
    this.userEmail = userEmail; 
    this.userPassword = userPassword; 
    this.userRole = userRole; 
} 

結構ResultSetMapper :

public class UserMapper implements ResultSetMapper<User>{ 

@Override 
public User map(int i, ResultSet rs, StatementContext sc) throws SQLException { 
    return new User(rs.getLong("user_id"), rs.getString("user_email"), rs.getString("user_password"), UserRole.ADMIN); 
}  
} 

結構:UserDAO的

@RegisterMapper(UserMapper.class) 
public interface UserDAO { 

@SqlUpdate("INSERT INTO users(user_email, user_password, user_role) VALUES(:userEmail, :userPassword, :userRole::userRole)") 
void create(@BindBean User user); 
} 

另外我有一個枚舉類:

public enum UserRole { 
ADMIN; 

}

任何人可以幫助我與我的問題

親切的問候,

回答

1

我認爲你必須在你的查詢中的錯字糾正它是這樣的:

@SqlUpdate("INSERT INTO users(user_email, user_password, user_role) VALUES(:userEmail, :userPassword, :userRole)") 

,並創建user_roleVARCHAR(255)像這樣類型的表:

CREATE TABLE "users" 
    (
user_id SERIAL PRIMARY KEY NOT NULL, 
user_email VARCHAR(255) NOT NULL, 
user_password VARCHAR(255) NOT NULL, 
user_role VARCHAR(255) 
    ); 
+0

感謝您的回覆,我試試你的SQL更新,但它不工作。這是錯誤消息:錯誤:列「user_role」的類型是userrole,但表達式的類型是字符變化的。提示:您將需要重寫或轉換表達式。 – Michael

+0

@Michael查看更新後的答案 – Abdelhak