powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + JDBC/ODBC DBF
16 сообщений из 16, страница 1 из 1
Java + JDBC/ODBC DBF
    #37640293
Чёрный Медведь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые коллеги. Требуется Ваша помощь.
Использую связку java + DBF (Visual Fox Pro) в десктопном приложении. Наблюдается следующий странный эффект: при выборке из таблицы размером ~200 Мб с медленного сетевого диска некоторые строки в ResultSet дублируются! Причём если запускать выборку под отладчиком и делать все по шагам, то данные получаются корректные(не дублируются) из чего можно предположить, что драйвер FoxPro как-то странно подтягивает данные. Подскажите что это может быть за глюк и как его победить.
Просьба не предлагать сменить старый убогий DBF на какой-нибудь нормальную СУБД, т.к. в ТЗ именно DBF причём с поддержкой CDX.
Заранее спасибо за конструктивные ответы.
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640306
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрный МедведьИспользую связку java + DBF (Visual Fox Pro) в десктопном приложении.
Очевидно ODBC?
Не пробовали использовать какие-нибудь JDBC драйвера для DBF? Они есть разные, можно эксперементальным путём подобрать более правильные для вашего случая. Так же у разных драйверов есть разные возможности по оптимизации настроек.
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640312
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрный Медведь,
написать сюда минимальный тест с CountRecord1<>Count2.
Оно ведь будет разным?
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640319
Чёрный Медведь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да мост ODBC-JDBC. Выбор пал на него из-за необходимости использовать CDX индексы, т.к. ни один бесплатный DBF драйвер эту хрень не поддерживает.
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640323
Чёрный Медведь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, не понял. Поясните пожалуйста что Вы имели ввиду?
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640329
Чёрный Медведь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что странно ещё, задержка в текущем потоке 5 сек решает проблему на моей машине. Но в принципе это никого не устроит, так как программа будет использоваться в более чем 50-ти местах на совершенно разных компьютерах и сетях. Так что такое шаманство не подходит. Пичалька...
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640351
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрный МедведьPetro123, не понял. Поясните пожалуйста что Вы имели ввиду?
дубли строк меняют RecordCount в ResultSet?
Пример нужен.
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640361
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрный Медведь,

он очень глючный, мы с ним мучились, мучились, в итоге отказались
как рекомендация: проверьте что у вас стоит самая последняя версия драйвера, нам частично помогло скачивание с сайта макрософта последних версий (стало лучше, но все равно глючило).

к чему в итоге пришли мы: c помощью com.linuxense.javadbf читали dbf файл во временную таблицу в нормальной субд (DB2 в нашем случае) и затем уже строили индексы и производили обработку данных
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640380
Чёрный Медведь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, ок. Надеюсь что код что-нибудь прояснит.

Запрос такой:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
	select ap.KZIP, ap.KSTRX, ap.NSTRX, ap.FAM, ap.IM, ap.OTCH, ap.SEX, ap.DATE_BIRTH, ap.SER_POLI, ap.NUM_POLI,
		          ap.SER_PASP, ap.NUM_PASP, ap.PENSION, ap.INOGOR
         from STAC_ZAB sz
			  inner join AMB_PAC ap on ap.KZIP = sz.KZIP
        where (sz.VV_ERR = '2' or EMPTY(sz.VV_ERR))
          and not EMPTY(sz.DTBEG)
          and sz.DTEND between ? and ?
          and sz.VID_OPL = 1
        group by ap.KZIP, ap.KSTRX, ap.NSTRX, ap.FAM, ap.IM, ap.OTCH, ap.SEX, ap.DATE_BIRTH, ap.SER_POLI, ap.NUM_POLI,
                 ap.SER_PASP, ap.NUM_PASP, ap.PENSION, ap.INOGOR

        union

       select ap.KZIP, ap.KSTRX, ap.NSTRX, ap.FAM, ap.IM, ap.OTCH, ap.SEX, ap.DATE_BIRTH, ap.SER_POLI, ap.NUM_POLI,
              ap.SER_PASP, ap.NUM_PASP, ap.PENSION, ap.INOGOR
         from AMB_ZAB az
        inner join AMB_PAC ap on ap.KZIP = az.KZIP
        where (az.VV_ERR = '2' or EMPTY(az.VV_ERR))
          and not EMPTY(az.DATE_OTKR)
          and az.DATE_ZL between ? and ?
          and az.VID_OPL = 1
        group by ap.KZIP, ap.KSTRX, ap.NSTRX, ap.FAM, ap.IM, ap.OTCH, ap.SEX, ap.DATE_BIRTH, ap.SER_POLI, ap.NUM_POLI,
                 ap.SER_PASP, ap.NUM_PASP, ap.PENSION, ap.INOGOR



Выборка осуществляется так:

Код: 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.
			PreparedStatement statement = connection.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			statement.setDate(1, periodBegin);
			statement.setDate(2, periodEnd);
			statement.setDate(3, periodBegin);
			statement.setDate(4, periodEnd);

			ResultSet resultSet = statement.executeQuery();
//			try
//			{
//				Thread.sleep(5000);
//			}
//			catch (InterruptedException exception)
//			{
//				// TODO Auto-generated catch block
//				exception.printStackTrace();
//			}
			

// Вот тут происходят какие-то странные вещи. Под отладчиком одно, в работе - другое!

		  while (resultSet.next())
		  {
		  	Patient patient = new Patient();
		  	patient.setNonresident(resultSet.getInt("INOGOR") == 1);
...
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640383
Чёрный Медведь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kuznetsov, спасибо за совет. Такой возможности нет, так как эта утилитка должна работать СОВМЕСТНО со старым "добрым" ПО, которому 20 лет уже. Вот такие дела...
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640436
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрный Медведь
Код: java
1.
 while (resultSet.next())


- узнай точно сколько строк
- в коде поставь проверку на ЭТО количество
- выведи НЕсоответствие или соответствие по этому критерию.
Насколько помню RecordCount там есть
ЗЫ потоки УБЕРИ
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37640475
Чёрный Медведь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, спасибо за пристальное внимание к моему вопросу. Тест показал, что количество строк всегда одинаковое. Проверить это оказалось несложно так как имеются отладочные таблицы, куда я вывожу данные в удобном для контроля виде. Т.е. разница именно в нескольких ПЕРВЫХ строках. Если иду медленно по шагам, то всё в порядке, иначе первые строки это данные откуда-то из середины ResultSet'а. Такое ощущение, что я дважды по какому-то фрагменту курсора прохожу.

Однако, на глаза мне попалась страничка http://www.connectionstrings.com/visual-foxpro#89 на которой в разделе Bridging to Microsoft Visual FoxPro ODBC Driver указана строка подключения с параметром BACKGROUNDFETCH=NO . Уважаемые коллеги, поправьте меня если я неправ, но мне кажется, что по умолчанию драйвер тащит данные в отдельном потоке, и в моём случае он делает это некорректно, вследствие чего я прохожу по курсору дважды. Я установил этот параметр в NO и проблема решилась. По крайней мере первые тесты прошли успешно.

Всем откликнувшимся большое спасибо за потраченное время. Надеюсь, что не придётся возвращаться к этой беде ещё раз.
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37641218
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрный МедведьДа мост ODBC-JDBC. Выбор пал на него из-за необходимости использовать CDX индексы, т.к. ни один бесплатный DBF драйвер эту хрень не поддерживает.

HXTT DBF Drivers for Xbase Database вроде поддерживает такие индексы, но он платный. Можно для любого бесплатного сделать собственную обработку CDX индексов их описание есть .
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37641222
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрный МедведьAlexey Kuznetsov, спасибо за совет. Такой возможности нет, так как эта утилитка должна работать СОВМЕСТНО со старым "добрым" ПО, которому 20 лет уже. Вот такие дела...
А такую штуку видели? wiki
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37641240
Чёрный Медведь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick HXTT DBF Drivers for Xbase Database вроде поддерживает такие индексы, но он платный.
Ну так и я о том же, платный не подходит по понятным причинам.
Garrick Можно для любого бесплатного сделать собственную обработку CDX индексов их описание есть .
Можно, кто спорит, но мне никто не даст время на разработку и отладку такой специфической вещи как поддержка CDX индексов в чьём-то чужом драйвере, который ещё нужно грамотно выбрать. Т.е. нужен был проверенный готовый продукт
...
Рейтинг: 0 / 0
Java + JDBC/ODBC DBF
    #37641248
Чёрный Медведь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickА такую штуку видели? wiki

Спасибо, что делитесь интересной информацией по новым проектам, но новый клиппероподобный язык - это не для нашей компании и не для меня в частности. У нас придерживаются определённых правил в выборе средств разработки, никто из моих коллег не будет изучать клиппер только потому, что в сети появился новый компилятор и я вдруг решил на нём писать. Однако, многие думаю будут рады такому продукту, так как народ ещё пишет ПО и на FoxPro и на clipper.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + JDBC/ODBC DBF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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