2016-04-23 47 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