2013-05-10 6 views
0
CREATE TABLE customers 
(
    first_name character varying(15), 
    second_name character varying(20), 
    login character varying(15) NOT NULL, 
    password character varying(15), 
    email character varying(40), 
    gender gender, 
    register_date date, 
    date_of_birth date, 
    address character varying(40), 
    address_number integer, 
    town character varying(20), 
    CONSTRAINT login PRIMARY KEY (login) 
) 

У меня есть эта таблица, и я создал перечисление гендера, таких как:Java перечисление и PostgreSQL перечисление

CREATE TYPE gender AS ENUM ('F', 'M',); 

Я пытаюсь вставить данные клиентов из затмения Java с PreparedStatement но есть ошибка, такая как ОШИБКА: столбец «пол» относится к типу пола, но выражение имеет характерный тип, изменяющийся Подсказка: вам нужно будет переписать или передать выражение.

Мой Java код выглядит следующим образом:

PreparedStatement pre_state; 

public enum gendertype { 
    F, 
    M; 
} 

pre_state = conn.prepareStatement("INSERT INTO" 
      + " customers VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 
pre_state.set(6, gendertype.F.toString()); 
+0

Это, вероятно, вставка его как 'F ':: text', что вызовет ошибку. –

+0

ok Я нашел в качестве решения, и он работает – user2317288

+0

pre_state = main.conne.conn.prepareStatement ("вставить в ценности клиентов (?,?,?,?,?,? :: gender,?,?,?,?,?) "); – user2317288

ответ

4

Я не могу принять никакого кредита за этот ответ, как вы уже решили, но я объясню, почему это работает.

PostgreSQL дает ответ, когда он говорит

Hint: You will need to rewrite or cast the expression

код Java создает строковый литерал значение, которое представляет тип перечисления gendertype Java.

Выполнение литерального выражения для типа пола PostgreSQL осуществляется путем добавления суффикса литья к значению ::gender.

Так действительный вклад будет

'F'::gender 

или

'M'::gender 

Это работает, потому что все PostgreSQL типы имеют метод ввода, который принимает текстовое представление и преобразующий, что к внутренней форме.

Смежные вопросы