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 Comentario

  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, …

Dejar respuesta

Please enter your comment!
Please enter your name here