![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Ситуация следующая:
Ко мне приходит xml, я распарсиваю его и получаю property, value, type Пример: property = "Name", value = "Dima", type = "String" Создаю массивы этих данных property[], value[], type[] и засовываю в ArrayList. Далее эти массивы разбираю с помощью PreparedStatement и засовываю в БД
Это работает, но хотелось бы чего-то менее грамоздкого Это сообщение отредактировал(а) Grelloo - 29.6.2006, 15:20 |
|||
|
||||
| powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Ты используешь PreparedStatement, так зачем же несколько раз его создавать? PreparedStatement - это преварительно компилируемый запрос, создай его один раз:
а в цикле только значения подставляй. К примеру:
так можно избавиться от грамозких операций со сложением строк. Это сообщение отредактировал(а) MoonCat - 29.6.2006, 15:57 |
||||
|
|||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Grelloo,
...которые, к тому же, очень вредны, потому что их планы не кешируются на уровне БД. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Property должны быть в качестве названий столбцов и их чило заранее неизвестно, а здесь
совсем другие столбцы property и values База выглядит следующим образом property1 property2 .. propertyN value 1 value2 .. valueN value 1 value2 .. valueN |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Тогда PreparedStatement для тебя бесполезен. Либо вставляй в пустые колонки null'ы.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
У меня массивы property[] и value[] заполнены значениями и не содержат null. Каждому poperty соответствует свой value. Почему же я не могу использовать PreparedStatment?
|
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Можешь, просто это не даст тебе прироста в случае динамических запросов. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
У тебя таблица не нормальзованна, её лучше на 2 разбить. На : propertyName, Value, ObjID и : ObjID, ObjName где ObjName - объект который обладает определенными свойствами из превой таблицы. |
|||
|
||||
| Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Так, мне кажется я не совсем полность изложил свою задачу и поэтому происходит непонимание.
Как я уже говорил приходит файл xml и из него вытаскивается property и value, которые являются первым уровнем от корневого элемента. То есть имеется следующая структура (это описание класса засунутого в xml):
Теперь зная propery и value надо создать одну строку в базе данных, где каждому property соответствует свое value. Причем primary key задается сразу и является одним из property. |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Сколько таких xml файлов? (Сколько обектов?)
Число свойств фиксированно или нет? Они могут быть пустыми? |
|||
|
||||
| Grelloo |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
В каждом xml файле может содеражться несколько тегов <object>, причем у каждого object свой класс
В зависимости от атрибута class выбирается parser class (с помощью HashMap), который будет обрабатывать данный тег <object>
Кажый ParserClass заранее знает все property, которые ему придут. Соответственно если property пустое, то присваивается значение null. Это сообщение отредактировал(а) Grelloo - 30.6.2006, 10:02 |
||||
|
|||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Я так понимаю, что у тебя есть несколько объектов, каждый из которых обладает пременным числом свойств (в зависимости от класса), некоторые из которых могут быть пустыми. (?) Так чем тебе не подходит такая структура БД:
2 таблицы, в первой: 1) id (счетчик) объекта 2) имя класса. Во второй: 1) id объетка (из первой таблицы) 2) имя свойства и 3) значение свойства. Связь между записями по идентификатору объекта. ИМХО, так нормализованней будет. К тому же и Java код заметно упростится. Если свойство какого либо равно null, то и записи о нем просто нет. Единственный недостаток - все записи будут строками, даже числа. |
|||
|
||||
| Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Нет у меня для каждого class будет своя таблица в БД. Как мне лучше организовать PreparedStatement для этого случая?
|
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
для каждой таблицы свой "заточенный" PreparedStatement. Сколько таблиц (сколько возможных запросов на добавление) - столько PreparedStatement. Либо как в ты делал - сложение строк для формирования запроса, но тогда все плюсы PreparedStatement пропадут и скорости в выполнении запросов ты не получишь. Задесь можно смело использовать просто Statement. P.S.: ... либо 2 простых запроса в PreparedStatement на добавление любого объекта, при моей организации БД. |
|||
|
||||
| Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Все-таки как-то странно получается: если заранее неизвестно сколько будет столбцов в таблице, то подготовить PreparedStatment достаточно сложно, т. к. приходится явно указывать все символы "?". Может есть другие варианты?
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |