Вставка файла в базу данных Postgres

Я выполняю миграцию данных из базы данных oracle в базу данных postgres 9.0. Все поля успешно переносятся, за исключением случаев, когда я пытаюсь переместить столбец файла (объект Blob в Oracle) в postgres(bytea в postgres). Это исключение, которое я получаю

org.postgresql.util.PSQLException: ERROR: syntax error at or near "",#\\034\\034(7),01444\\037\'9=82<.342\\377\\333\\000C\\001\\011\\011\\011\\014\\013\\014\\030\\015\\015\\0302!\\034!22222222222222222222222222222222222222222222222222\\377\\300\\000\\021\\010\\000D\\0004\\003\\001""

Ниже приведен фрагмент кода, который я использую для хранения файла в базе данных:

Class.forName("org.postgresql.Driver");
        destDatabaseconnection = DriverManager.getConnection(
                rb.getString("DESTINATION_DATABASE_CONNECTION_URL"),
                rb.getString("DESTINATION_DATABASE_CONNECTION_USERNAME"),
                rb.getString("DESTINATION_DATABASE_CONNECTION_PASSWORD"));

        File file = new File("d://img//10090.gif");
        System.out.println(file.isFile());
        FileInputStream fis = new FileInputStream(file);
        prepstmt = destDatabaseconnection
                .prepareStatement("insert into entps.emp_photos(emp_number,emp_photo) values (?,?)");
        prepstmt.setInt(1, 1);

        prepstmt.setBinaryStream(2, fis, (int) file.length());
        int check = prepstmt.executeUpdate();
        System.out.println(check);

Сообщите мне, если вы когда-либо сохраняли файл в postgres 9.0.


person tusharagrawa    schedule 24.12.2013    source источник
comment
+1 за переход с Oracle на PostgreSQL   -  person Oleg Mikheev    schedule 24.12.2013


Ответы (1)


Просто для удовольствия я только что создал таблицу (в Postgres 9.2)

CREATE TABLE test
(
  id integer NOT NULL,
  file bytea,
  CONSTRAINT id PRIMARY KEY (id)
)

и успешно загрузили на него файл (используя драйвер 8.3 и 9.3):

public static void main(String[] args) throws Exception {
    Class.forName("org.postgresql.Driver");
    Connection conn = DriverManager.getConnection("jdbc:postgresql:test", "postgres", "");
    File file = new File("/tmp/q");
    FileInputStream fis = new FileInputStream(file);
    PreparedStatement pstmt = conn
            .prepareStatement("insert into test(id,file) values (?,?)");
    pstmt.setInt(1, 1);
    pstmt.setBinaryStream(2, fis, (int) file.length());
    int check = pstmt.executeUpdate();
    System.out.println(check);
} 

Пожалуйста, проверьте драйвер.

person Oleg Mikheev    schedule 24.12.2013
comment
Я пробовал это в Postgres 8.3, где это работает... Не могли бы вы проверить версию Postgres, которую вы используете.!! - person tusharagrawa; 24.12.2013
comment
Я использовал 9.2, с версиями драйверов 8.3 и 9.3. Пожалуйста, укажите свои версии в вопросе - person Oleg Mikheev; 24.12.2013
comment
Да, это сработало. На самом деле драйвер Postgres, который я использовал, не указал его версию, поэтому я подумал, что это единственный доступный драйвер, но при поиске я обнаружил, что доступно много обновленных драйверов, поэтому я использовал драйвер postgresql-9.3-1100.jdbc3 и это сработало.Спасибо Олегу Михеву - person tusharagrawa; 26.12.2013