Postgresql中插入枚举的问题

时间:2016-04-23 16:18:04

标签: java postgresql dropwizard

我想在我的应用程序中使用OAuth2在JAVA中创建一个登录系统。 但首先我必须创建一个帐户并插入我的数据库。

这是我的枚举表:

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);

此应用程序使用带有dbi数据库连接的dropwizard。 当我运行我的代码并执行我的SQL查询时,应用程序会抛出500错误,并显示以下消息:

  

列索引超出范围:3,列数:2。

     

绑定'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 个答案:

答案 0 :(得分: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)
   );