Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Сохранение файла в БД


Автор: Zhenia 22.6.2007, 11:01
Добрый день! Помогите, пожалуйста, разобраться. Пытаюсь сохранить pdf-файл (размер ~500Kb) в БД MSSQL 2000 (тип поля IMAGE), но ну никак не хочет работать updateBinaryStream. Код следующий:

Код

    ...
    Multipart mpart = (Multipart) mp;
    Part part = null;
    ...

    ...
    part = mpart.getBodyPart(i);
    ...

    ...
    // пробовал так, но с тем же эффектом.
//    PreparedStatement ps = conn.prepareStatement("INSERT INTO files (content) VALUES (?)");
//    ps.setBinaryStream(1, part.getInputStream(), part.getSize());
//    ps.executeUpdate();
//    ps.close();
    ...
    Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    String strsql = "SELECT * FROM files WHERE 0 = 1";
    ResultSet rs = stmt.executeQuery(strsql);

    rs.moveToInsertRow();
    rs.updateInt("type", 1);
    rs.updateDate("date", new java.sql.Date(new java.util.Date().getTime()));
    rs.updateString("name", fileName);
    rs.updateNull("description");
    rs.updateBinaryStream("content", part.getInputStream(), part.getSize());
    rs.insertRow();

    rs.close();
    rs = null;
    stmt.close();
    stmt = null;
    ...


Без rs.updateBinaryStream(...) все прерасно работает, с ним же - сервлет выполняется раз в 50 медленнее, чем без него, так впридачу ничего не добавляет... Никаких ошибок не выдает... В чем может быть дело? Заранее благодарен!

P.S. На всякий случай - jdk 1.4.2, сервер Resin 2.1.17.

Автор: batigoal 24.6.2007, 21:23
В чем ошибка - не знаю, но правильный путь - это тот, который у тебя в комментариях.

Автор: Zhenia 25.6.2007, 15:36
Выяснилось, что если файл меньше 64K, то он отлично сохраняется.... Т.е. этот setBinaryStream/updateBinaryStream  не поддерживает поток более 64K или что? Как обойти? Куда копать? Заранее спасибо!

Автор: tux 26.6.2007, 07:36
Цитата(Zhenia @  25.6.2007,  15:36 Найти цитируемый пост)
Т.е. этот setBinaryStream/updateBinaryStream  не поддерживает поток более 64K или что? 

У потока вообще нет никаких ограничений на размер. Ограничения могут быть у драйвера JDBC. Драйвер от Microsoft написан в традиционном для этой конторы стиле, если используется именно он, рекомендую поменять на http://jtds.sourceforge.net/.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)