Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/32: Рейтинг темы: голосов - 32, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 13

Синхронизация таблицы из Firebird с файлом xml

09.04.2012, 15:24. Показов 6536. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые форумчане. Недавно начал пытаться программировать на Java. Возникла проблема.
Мне нужно написать программу, которая может выгрузить содержимое 1 таблицы из FireBird в xml документ. Так же программа должна синхронизировать данные в этой таблице с xml файлом. Удаляться из БД должны только те записи, которые отсутствуют в XML файле, добавляться соответственно только новые, а измененные должны обновляться. Синхронизация должна проходить по натуральному ключу таблицы. Условия: 1) чтение xml файла должно быть организовано с помощью XML DOM
2) В алгоритме синхронизации должен быть использован класс HashMap или HashSet. Для контроля ключей рекомендуем создать специальный класс, в котором реализовать методы хеширования и equals.

Написал часть программы, которая выгружает содержимое таблицы в xml файл. Все хорошо, выгружается как надо. А вот синхронизацию пока сделать не получается. Остановился я вот на чем: сначала создаю HashSet1 в котором содержатся объекты (1 объект-1 строка), которые есть на данный момент в таблице БД. Потом создаю HashSet2 с объектами такого же класса как и в первом, но в нем содержатья данные из xml файла, с которым надо синхронизировать таблицу.
В итоге у меня есть 2 HashSet-а которые надо сравнить. Как сравнить 2 хешсета на пример совпадения записей?
Помогите мне кто-нибудь пожалуйста. Вот пример xml файла с которым надо синхронизировать БД:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="windows-1251" ?> 
- <root>
- <worker>
  <depcode>1</depcode> 
  <depjob>2</depjob> 
  <description>Progremmer</description> 
  </worker>
- <worker>
  <depcode>1</depcode> 
  <depjob>1</depjob> 
  <description>Manager</description> 
  </worker>
- <worker>
  <depcode>1</depcode> 
  <depjob>3</depjob> 
  <description>Manager</description> 
  </worker>
</root>
Мой класс, который описывает структуру записи в БД:
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
package firebirdexample1;
 
public class DBRecord {
    //public int id;
    public String depcode;
    public String depjob;
    public String description;
    
    public DBRecord(String newdepcode, String newdepjobe, String newdesc){
        //this.id = newid;
        this.depcode = newdepcode;
        this.depjob = newdepjobe;
        this.description = newdesc;
    }
    
    
    public void PrintDBRecord(){
       // System.out.println("id="+id);
        System.out.println("depcode="+depcode);
        System.out.println("depjob="+depjob);
        System.out.println("description="+description);
        System.out.println("Finish!");
    }
    
    public String getKey(){
        return depcode+depjob;}
    
    public boolean IsEqualsKey(DBRecord rec){
        return (this.getKey().equals(rec.getKey()));
    }
    
    public boolean equals(DBRecord rec){
        if ((this.getKey().equals(rec.getKey())) && (this.description.equals(rec.description)))
            return true;
        else return false;             
    }
}
Класс DBHashSet наследуется от HashSet и выполняет функции создания сета из xml, из БД и выполняет экспорт сета в xml файл для операции выгрузки содержимого таблицы БД.
Так вот как сравнить 2 сета и выделить записи которые надо добавить/удалить/обновить???
Помогите кто нибудь
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2012, 15:24
Ответы с готовыми решениями:

Синхронизация двух баз Firebird
Добрый день. Есть два локальных рабочих места, совершенно идентичных. Соответственно, на каждом по серверу Firebird (2.0) и по рабочей...

Удалённое соединение с файлом БД Firebird
Здравствуйте! Создал программу в Delphi 7 для управления файлом базы данных NKO_ORGAN.fdb. Файл БД NKO_ORGAN.fdb разместил на сайте Ucoz. ...

Синхронизация потоков при работе с файлом
Доброго времени суток! У меня такая проблема: многопоточные приложения я не писал ни разу, но, в целом, имею представление о них....

24
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 13
12.04.2012, 10:36  [ТС]
Студворк — интернет-сервис помощи студентам
Хм...
Classpath у меня для ос прописан. А надо где-то отдельно прописывать? Я просто в java только начинаю) а нет ли ничего стремного в том, что я использую такой код для логгера?

Java
1
2
File propertiesFile=new File("log4j.properties");
        PropertyConfigurator.configure(propertiesFile.toString());
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
13.04.2012, 06:33
Цитата Сообщение от Guddy Посмотреть сообщение
Classpath у меня для ос прописан.
Это через переменную окружения CLASSPATH? Хреновая практика.

Цитата Сообщение от Guddy Посмотреть сообщение
А надо где-то отдельно прописывать?
Code
1
java -help
Читай про параметры -cp и -classpath. ещё загляни.

Добавлено через 1 минуту
Цитата Сообщение от Guddy Посмотреть сообщение
нет ли ничего стремного в том, что я использую такой код для логгера?
Eсли текущий каталог будет отличаться от каталога, в котором лежит log4j.properties, то не взлетит.
0
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 13
16.04.2012, 10:40  [ТС]
У меня есть метод, закрывающий ресурсы:
Java
1
2
3
4
5
6
7
8
9
public static void closeResource(Closeable res){
        try{  
            if(res!=null){
                res.close();
        }
        } catch (Exception ex){
            logger.error("Ошибка закрытия ресурса!"+ex);
        }
    }
Через него мне надо закрывать FileReader и Connection. Скажите, можно ли для Connection вызывать
closeResource((Closeable)conn);

Нет ли тут каких нибудь скрытых проблем и можно ли вообще так делать? А то closeResource(conn) выдает ошибку?
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
16.04.2012, 11:52
Цитата Сообщение от Guddy Посмотреть сообщение
Скажите, можно ли для Connection вызывать
closeResource((Closeable)conn);
А самому пройтись по иерархии вниз от java.sql.Connection тяжело? Вывод сам сделаешь?
1
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 13
16.04.2012, 11:59  [ТС]
Лучше использовать AutoCloseable?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.04.2012, 11:59

join таблицы к выборке из другой таблицы firebird 1.5
select * from table1 inner join (select distinct field0, field1, field2, SUM(field3) from table2 group by field0, field1, field2) ...

Как или чем конвертировать таблицы из Firebird в MySQL или наоборот из MySQL в Firebird ?!
Предлагайте все возможные варианты! Заранее при много благодарен!

Загрузить данные в бд из xml(FireBird)
Требуется из пришедшего xml файла, выдрать информацию и залить ее в базу данных. Кто сталкивался? Есть мануалы или примеры решения...

Загрузка данных из базы firebird и формирование XML файла
Задача считать данные из базы с расширением gdb после чего загрузить их в XML файл. Помогите пожалуйста как это сделать??

Работа с xml файлом
Здравствуйте, я чайник, но решил соорудить какую нибудь полезную прогу. Суть в том что из zip контейнера .docx файла берется document.xml,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
BitTorrent (версия 7.11 English) и Меню Настройки
russiannick 15.11.2026
Пункты, отвечающие за отключение обновлений в BitTorrent версии 7. 11 (английской) Options Preferences General Language
Транслитерация текста с кириллицы на латиницу (вариант №4)
Maks 15.11.2026
Что-то я перемудрил с предыдущими версиями, в этот раз сделал всё проще, обратившись к функции "СтрокаЛатиницей" из типового общего модуля "СтроковыеФункцииКлиент". В данной функции нет апострофов,. . .
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы. Карта этого меню приложена ниже. Нужный пункт выделен красным. Сервис Настройки Поведение
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru