Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Потеря данных при загрузке файла в CLOB / 11 сообщений из 11, страница 1 из 1
28.10.2016, 17:30
    #39336543
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потеря данных при загрузке файла в CLOB
Добрый день!
Подскажите, пожалуйста, новичку в такой ситуации. Написано консольное приложение для закачки файла из Инета и загрузки в базу 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
28.10.2016, 17:50
    #39336553
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потеря данных при загрузке файла в CLOB
Логируйте размер файла, чтобы быть увереным что проблема именно в записи в базу.
...
Рейтинг: 0 / 0
28.10.2016, 18:11
    #39336566
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потеря данных при загрузке файла в CLOB
Добавил в логирование
Код: 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
28.10.2016, 18:15
    #39336568
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потеря данных при загрузке файла в CLOB
IgorDКак проверить размер переданных в потоке InputStreamReader данных пока не знаю :(
Никак. Вы даёте драйверу стрим он сам оттуда вытягивает все данные.
...
Рейтинг: 0 / 0
28.10.2016, 18:21
    #39336574
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потеря данных при загрузке файла в CLOB
...
Рейтинг: 0 / 0
28.10.2016, 18:23
    #39336575
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потеря данных при загрузке файла в CLOB
IgorDДанные соответствую реальному размеру

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

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

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

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

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

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


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