powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC+Oracle(Parameters)
14 сообщений из 89, страница 4 из 4
JDBC+Oracle(Parameters)
    #39209725
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123На каком ЯП в базе разруливать. Приведи пример.
Что значит на каком ЯП? Если брать оракл, то PL/SQL.
Вариант селекта из xml тоже вариант, кстати и может быть довольно мощный, не пробовал.
Т.е. xml в виде CLOBа тащим в базу и в хранимке делаем из него селект, - мощно будет :)
Но говорю о том, что.
Когда мы заливаем данные в базу, то мы:
- готовим под эти данные структуры в базе, в частности таблицы
- готовим ХП в базе, которые кладут в конечном итоге данные в эти таблицы
при чем здесь внутри БД мы уже вольны писать гораздо эффективнее, чем на яве в плане работы с данными, можем делать на этом этапе кучи проверок, трансформаций, дополнений и т.д. (и если делать это же самое через яву, то мы просто удвоим и себе объем работы и машине).
Т.е. по-моему данная задача должна сводиться к созданию в яве интерфейса для БД, чтобы она могла "прочитать" этот файл. Т.е. достаточно явой сопоставить сущности+поля БД, с сущностями+полями в xml и привести их к типам в БД, никакой бизнес-логики в яве здесь не вижу :(, просто транзит/маппинг данных из файла в БД.
По-моему мы об одном говорим, но может чего-то не понимаю или не понимаю выражение "бизнес-логика" )
Например:
Petro123=== почти. Можно и однаХПнаОднуXML_Накладная
Вот эта ХП. Она же будет раскладывать данные по разным таблицам (контрагенты, товары, склады, цены). При этом, как правило, в будет делаться куча проверок, как явных в ХП, так и на автомате (констрейнты, обновление различных мат. вью, консолидация данных для отчетов и т.д.), данные в большинстве случаев в дальнейшем или сразу на лету трансофрмируются в зависимости от уже существующих в БД других данных и т.д. вот это и понимаю под бизнес-логикой. Делать это на яве мне кажется странным.
По-моему ява ж не заточна на манипуляции с данными в контексте реляционной БД.
Или я чего-то не знаю? )
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39209767
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,
Off
- а если у вас Postgre то будем на PostgrePL писать?
- а если импорт придёт от ИС с этого же домена по REST?
Все индивидуально.
Ты java программист или разработчик бд? В одном лице может крышу снести)))).
Удачи.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39209806
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Garrickp.setIntAtName
кроме того, сам код)) не в состоянии тип определить?
Можно использовать setObjectAtName . Spring, например, так делает.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39209843
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick,
замечательно. Попробую.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39209849
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123- а если у вас Postgre то будем на PostgrePL писать?
- а если импорт придёт от ИС с этого же домена по REST?
Все индивидуально.
А как еще? Конечно придется писать на PostgrePL.
Куда денешься от того, чтобы прописывать сущности в БД? )
И потом ojdbc работает с Postgre? Если нет, то придется ж и загрузчик на яве все равно переписывать или писать его с каким-нибудь универсальным провайдером данных типа одбц или датасорсы того же гласфиша
Но посыл понял ) Просто практически не работал с коробочными решениями, ориентированными на большой круг потребителей и потому заточенных на работу с любой БД. Все крупные конторы, которые видел, как правило, имеют свою систему очень плотно завязанную на конкретную СУБД. По-моему нельзя добиться эффективной отдачи от СУБД, используя ее только как таблички, а всю обработку данных, бизнес-логику вынести в яву, точнее можно, но тогда зачем тот же oracle? Бери таблички MSSQL и вперед )) Истина где-то посредине наверно, конечно все индивидуально )
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39209860
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,
давай завязывать OFF. Хибер, ОРМ и АппСервер работают со всеми СУБД сразу.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39209892
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и JDBC, Select и Insert от БД к БД меняются не сильно. Особенно в контексте задачи разобрать XML и разложить по полям таблицы.

У JDS какой-то поток сознания:
1. Хочешь на Java - делай на Java. В чем проблема?
2. Хочешь на PL/SQL - делай на PL/SQL. Опять таки, в чем проблема? Oracle PL/SQL базовые средства работы с XML (но только через DOM) имеет, т.ч. можно и весь разбор на PL/SQL написать. Скорее всего будет работать значительно медленнее, чем на Java, но решать Вам.
3. Проблема сформулированная изначально "определить типы параметров сторед процедуры" - надуманная. Т.к. все необходимые средства для этого есть. И в Oracle (вьюшки с метаописанием) и в JDBC (независимо от типа БД).
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39209977
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, Petro123, со всем согласен.
Написать-то можно, не вопрос, но хочется ж оптимально и грамотно, а получается какое-то мясо пока.
Более предметно.
В соседней теме посоветовали юзать hashmap, для доступа к "массиву" по строковым ключам, набросал такой треш ) :
Код: 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.
    private class someObject {
        private final Map<String, Integer> idx = new HashMap<>(); // порядковые номера параметров в ХП, т.е. <имя тега, пор.№ параметра в ХП>
        private final Map<String, Integer> types = new HashMap<>();  // тип параметра
        public  final Map<Integer, Object> fieldValues = new HashMap<>(); // значение параметра ХП

        someObject() {
           idx.put("FIELD1", 1);   types.put("FIELD1", 0);
           idx.put("FIELD2", 2);   types.put("FIELD2", 1);
           idx.put("FIELD3", 3);   types.put("FIELD3", 1);
           idx.put("FIELD4", 4);   types.put("FIELD4", 1);
           idx.put("FIELD5", 5);   types.put("FIELD5", 1);
           idx.put("FIELD6", 6);   types.put("FIELD6", 4);
           idx.put("FIELD7", 7);   types.put("FIELD7", 1);
           idx.put("FIELD8", 8);   types.put("FIELD8", 1);
           idx.put("FIELD9", 9);   types.put("FIELD9", 1);
           idx.put("FIELD10", 10); types.put("FIELD10", 1);
           idx.put("FIELD10", 11); types.put("FIELD11", 2);
           idx.put("FIELD12", 12); types.put("FIELD12", 2);
           clearFieldValues();
        }
        
        public void clearFieldValues() {
            for (int i=1; i<13; i++) 
               fieldValues.put(i, null); 
        }        
        
        public void setFieldValue(String fieldName, String fieldValue) {
            int ix = idx.get(fieldName);
            switch  (types.get(fieldName)) {
                case 0: fieldValues.put(ix, fieldValue); break; // String
                case 1: fieldValues.put(ix, getDateFromStringFunc(fieldValue)); break; // Date
                case 2: fieldValues.put(ix, Integer.parseInt(fieldValue)); break; // Integer
                case 3: fieldValues.put(ix, getDateFromStringFunc(fieldValue)); break; // TimeStamp
                case 4: fieldValues.put(ix, Double.parseDouble(fieldValue)); break; // Double
                case 5: fieldValues.put(ix, getClobFromString(fieldValue)); break; // Clob
            }
        }
    }


Еще не пробовал, т.к. не нравится.
Т.е. для каждой сущности создаем свой класс, в котором по мере разбора xml заполняем fieldValues.
Пошла новая сущность, добавили все значения fieldValues в пакет стейтмента, очистили fieldValues, читаем xml дальше.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39209989
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS
Код: java
1.
 private class someObject {


поздравляю.
Ты изобрёл java.sql.DataSet
ну, или JDBC RowSet (Sun JCP, JSR 114)
JDSно хочется ж оптимально и грамотно
перфекционист? ))
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39209996
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDSТ.е. для каждой сущности создаем свой класс,
осталось чуть до маппинга и ОРМ в виде хибера или iBatis.
....
Дайте ему сериализацию или маппинг из XML сразу в обхекты.
И пусть парит мозги соисполнителю если его XML не такой.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39210000
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,

Може вам это надо?
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39210001
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,
тебе дали разработку Модуля импорта из XML в БД.
Версия 1.0 - пол дня работы.
Сделал?
Это imho
В след.версиях улучшишь.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39210011
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick, возможно, но думал, без стороннего все можно сделать.
Petro123, "потом" как правило не наступает, т.к. появляются новые задачи ) поэтому лучше по возможности делать сразу нормально, чем потом переделывать. В общем, если других нормальных вариантов кроме хиберов, то придется жить с этим пока )
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #39213208
AlexJm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDSGarrick, возможно, но думал, без стороннего все можно сделать.
Petro123, "потом" как правило не наступает, т.к. появляются новые задачи ) поэтому лучше по возможности делать сразу нормально, чем потом переделывать. В общем, если других нормальных вариантов кроме хиберов, то придется жить с этим пока )

А что, есть уверенность что хибернейт вызов хранимки в oracle сможет нормально сделать? К примеру,
Код: plsql
1.
2.
3.
4.
5.
create or replace package pkg is
  
  procedure run_it (p_var1 varchar2, p_var2 varchar2, p_var3 out varchar2);

end;


и далее,
Код: plsql
1.
2.
3.
begin
   pkg.run_it(:a, :a, :a);
end;



я думаю, тоже ничего хорошего не получится.
...
Рейтинг: 0 / 0
14 сообщений из 89, страница 4 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC+Oracle(Parameters)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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