Вставьте файл в поле blob с помощью jaybird 2.1.6 - PullRequest
1 голос
/ 22 июня 2011

Я пытаюсь вставить файл в поле большого двоичного объекта в базе данных Firebird, используя lib jaybird 2.1.6.

Сначала я создаю запись в своей базе данных, затем, с идентификатором записи,Я пытаюсь вставить свой файл в поле большого двоичного объекта (подтип 0).

Вот мой код:

public static boolean insertBlob(File p_file, String p_maxId) {
    String requette = 
        "UPDATE MAIL_RECU a SET a.CONTENU=? where a.ID_MESSAGE_RECU="+ p_maxId;

    PreparedStatement ps = null;
    FileInputStream input = null;
    try {
        ps = laConnexion.prepareStatement(requette);
        input = new FileInputStream(p_file);

        int paramIdx = 1;
        ps.setBinaryStream(paramIdx++, input, p_file.length());
        ps.executeUpdate();
    } catch (SQLException e) {
        System.out.println("cause: " + e.getCause());
        System.out.println("stacktrace: " + e.getStackTrace());
        System.out.println(e);
        messageUtilisateur.affMessageException(e,
                "Erreur à l'insertion d'un blob");
    } catch (FileNotFoundException e) {
        messageUtilisateur.affMessageException(e,
                "impossible de trouver le fichier");
    } finally {
        try {
            ps.close();
            input.close();

        } catch (SQLException e) {
            messageUtilisateur.affMessageException(e,
                    "Erreur à l'insertion d'un blob");
        } catch (IOException e) {
            messageUtilisateur.affMessageException(e, "fichier non trouvé");

        }
    }

    return true;
}

Проблема в том, что у меня исключение, когда

ps.setBinaryStream(paramIdx++, input, p_file.length());

выполнено.

У меня есть сообщение "java.sql.SQLException: еще не реализовано".У меня вопрос, есть ли у кого-нибудь уже эта проблема?Если да, то как он (или она) это исправил?Есть ли другой способ сохранить файл в blob с помощью jaybird?

1 Ответ

2 голосов
/ 22 июня 2011

setBinaryStream(int, InputStream, long) - это метод JDBC4 (Java 6).

Насколько я знаю, Jaybird все еще JDBC3, поэтому вам нужно использовать PreparedStatement.setBinaryStream(int, InputStream, int) вместо:

ps.setBinaryStream(paramIdx++, input, (int)p_file.length());
...