2016-04-23 7 views
0

Ich möchte ein Login-System in JAVA für meine Anwendung mit OAuth2 machen. Aber zuerst muss ich ein Konto erstellen und in meine Datenbank einfügen.Probleme mit Einfügung Enumeration in Postgresql

Dies ist meine Aufzählung Tabelle:

CREATE TYPE userRole AS ENUM ('ADMIN'); 

Und das ist meine Benutzertabelle:

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

Diese Anwendung mit einer dbi Datenbankverbindung verwendet dropwizard. Wenn ich meinen Code ausführen und meine SQL-Abfrage ausführen, führt die Anwendung einen 500-Fehler mit den folgenden Meldungen:

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

Exception while binding 'userRole'

Dies ist die Struktur meines Modells ist (Benutzer):

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

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

Struktur: 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); 
} 

Auch habe ich eine Aufzählungsklasse:

public enum UserRole { 
ADMIN; 

}

Kann mir jemand bei meinem Problem

Mit freundlichen Grüßen,

Antwort

1

helfen Ich denke, Sie Fehler in Ihrer Anfrage haben Korrigiere es so:

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

und erstellen Sie die Tabelle mit Spalte user_role die Art der VARCHAR(255) wie folgt aus:

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

Vielen Dank für Ihre Antwort, ich versuche, SQL-Update, aber es funktioniert nicht. Dies sind die Fehlermeldungen: ERROR: Die Spalte "user_role" hat den Typ userrole, aber der Ausdruck ist vom Typ Zeichen unterschiedlich. Tipp: Sie müssen den Ausdruck neu schreiben oder umwandeln. – Michael

+0

@Michael sehen die aktualisierte Antwort – Abdelhak