powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Потеря данных при загрузке файла в CLOB
11 сообщений из 11, страница 1 из 1
Потеря данных при загрузке файла в CLOB
    #39336543
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Подскажите, пожалуйста, новичку в такой ситуации. Написано консольное приложение для закачки файла из Инета и загрузки в базу Oracle. Из Интеа файл загружается в полном объеме. А вот в базу попадает не весь.

Запись в базу
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
//----------------------------------------------------------------------------------------------------------------//
    public static void callOracleStoredProc(String fileName, String typeData) {

        Connection dbConnection = null;
        String StoredProc = null;
        CallableStatement callableStatement = null;
        String charset = null;

        try {

            if (typeData == "KIS") {
                StoredProc = "{call load_cust_kis(?,?,?)}";
                charset = "CP1251";
            }
            else if (typeData == "PEP") {
                StoredProc = "{call load_cust_pep(?,?,?)}";
                charset = "UTF8";
            } else {
                log.error("No find type data in private static void callOracleStoredProc");
                System.exit(1);
            }

            log.info("set stored procedure " + StoredProc);
            log.info("set charset from file " + charset.toString());

            dbConnection = getDBConnection();
            File file = new File(fileName);

            log.info("read data from file " + fileName);
            FileInputStream is = new FileInputStream(file);
            InputStreamReader isr = new InputStreamReader(is, charset);

            callableStatement = dbConnection.prepareCall(StoredProc);

            callableStatement.setString(1, file.getName());
            callableStatement.setClob(2,isr);
            callableStatement.registerOutParameter(3, java.sql.Types.CLOB);
            log.info("processing the uploaded data on the url:  " + dbConnection.getMetaData().getURL());
            callableStatement.execute();
            log.info("processing result : " + callableStatement.getString(3));

        } catch (SQLException e) {
            log.error(e.getMessage());
        } catch (FileNotFoundException e) {
            log.error(e.getMessage());
        } catch (IOException e) {
            log.error(e.getMessage());
        } finally {
            try {
                if (callableStatement != null) {
                    callableStatement.close();
                }
                if (dbConnection != null) {
                    dbConnection.close();
                }
            } catch (SQLException e) {
                log.error(e.getMessage());
            }
        }

    }
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39336553
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логируйте размер файла, чтобы быть увереным что проблема именно в записи в базу.
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39336566
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил в логирование
Код: java
1.
log.info("read data from file " + fileName + ", size (byte): " + file.length());



Данные соответствую реальному размеру

Код: powershell
1.
[INFO ] 2016-10-28 18:00:18.358 [main] Upload:156 - read data from file .//downloads/161028_1513_pep.xml, size (byte): 24044889




Как проверить размер переданных в потоке InputStreamReader данных пока не знаю :(
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39336568
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorDКак проверить размер переданных в потоке InputStreamReader данных пока не знаю :(
Никак. Вы даёте драйверу стрим он сам оттуда вытягивает все данные.
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39336574
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39336575
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorDДанные соответствую реальному размеру

А сколько попадает в базу? Каждый раз по разному?
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39336587
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczIgorDДанные соответствую реальному размеру

А сколько попадает в базу? Каждый раз по разному?

Провел эксперимент следующим образом. Pl/Sql Developer'ом сохранил содержимое clob поля в файл. Размер файла постоянно один и тот же - 21340816, файла оригинала - 24044889
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39336591
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorDПровел эксперимент следующим образом. Pl/Sql Developer'ом сохранил содержимое clob поля в файл. Размер файла постоянно один и тот же - 21340816, файла оригинала - 24044889
А сравнить файлы не судьба?

Подозреваю, где-то по дороге вырезалось \r\n и заменилось на \n

Если хотите сохранять бинарные файлы, то BLOB. Если текстовые, то может "гулять" в зависимости от кодировки.

P.S. Кодировки символов не существует (TM)
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39336595
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прозрел. Разница в размере файла связана с изменением кодировки. Т.е. по количеству строк файлы одинаковые, потери данных нет. Буду разбираться в этом.
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39336611
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я одно время очень долго мучился с подписыванием XML в Oracle и Java. Что-то сделал, отступы и переводы строк уехали, подпись не валидная. Мучился, мучился и все сделал через byte[] и blob ((( От Oracle XmlType пришлось отказался как от кошмарного сна
...
Рейтинг: 0 / 0
Потеря данных при загрузке файла в CLOB
    #39338152
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема решена. Оказалось, что не верно была указана кодировка. У меня было UTF8 а нужно ASCII. Причем загружаемый файл ранее был открыт редактором Notepad++, который указал кодировку как UTF8. Я за это зацепился. В результате сохранения данных в CLOB происходила перекодировка символов и менялся размер. Указал ASCII - размеры исходного файла совпали с загруженными данными. Спасибо всем, кто откликнулся и помог.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Потеря данных при загрузке файла в CLOB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]