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

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

09.04.2012, 15:24. Показов 6326. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru