PostgreSQL Sugerencia: Usted tendrá que reescribir de fundición o de la expresión. la columna «estado» es del tipo de estado, pero la expresión es de tipo character varying

Estoy tratando de crear una instrucción SQL en java. El problema es que estoy usando

 stmt.setString(9, ev.getState().status());

para una variable estoy tratando de insertar en una columna SQL de tipo de estado

 CREATE TYPE STATUS AS ENUM ('APPROVED', 'CLOSED','STARTED', 'WAITING');

Es tirar de mí una excepción de

column "state" is of type status but expression is of type character varying
Hint: You will need to rewrite or cast the expression.

¿ Me equivoco o lo que en realidad necesita para convertir el valor en sql? Si sí, ¿cómo hace uno para emitir en esta situación?

Declaración Completa:

     PreparedStatement stmt = conn.prepareStatement("INSERT INTO Event (EventNum, EventName, startHour, endHour, startMin, endMin, startDate, endDate, State, depName) VALUES (?, ?, ?, ?, ?, ?, ?::date, ?::date, ?, ?)");




     stmt.setInt(1, ev.getEventNum());
     stmt.setString(2, ev.getName());
     stmt.setInt(3, ev.getStartHour());
     stmt.setInt(4, ev.getEndHour());
     stmt.setInt(5, ev.getStartMinute());
     stmt.setInt(6, ev.getEndMinute());
     stmt.setString(7, ev.getStartYear() + "-" + ev.getStartMonth() + "-" + ev.getStartDate());
     stmt.setString(8, ev.getEndYear() + "-" + ev.getEndMonth() + "-" + ev.getEndDate());
     stmt.setString(9, ev.getState().status());
     stmt.setString(10, ev.getDepartment());



     stmt.executeUpdate();
InformationsquelleAutor Gatiivs | 2017-08-25

1 Kommentar

  1. 9

    Usted está usando Sentencias Preparadas – PostgreSQL conseguir información del lado del cliente, por lo que el parámetro es varchar porque está utilizando setString método. Usted debe informar a Postgres, por lo que de entrada tipo de datos es diferente con la conversión explícita.

    PreparedStatement stmt = conn.prepareStatement(
      "INSERT INTO Event (EventNum, EventName, startHour, endHour, startMin, endMin, startDate, endDate, State, depName)
                   VALUES (?, ?, ?, ?, ?, ?, ?::date, ?::date, ?::status, ?)");

    Todos los datos se transmiten en forma de texto (que es el predeterminado) – de modo que no hay un problema con valores pasados. PostgreSQL utiliza estrictos tipo de sistema – y sin una conversión explícita de no permitir el reparto de varchar a date, enum, int, …

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea