Использование xbasej с индексами NTX

Я пытаюсь использовать файлы DBF из Java для новых утилит, которые взаимодействуют с большой старой системой. Я могу получить доступ, прочитать, записать, обновить с помощью моста Java ODBC, но это не обновляет индексы NTX. Я нашел xbasej, который утверждает, что может использовать индексы, но, похоже, может использовать только индексы NDX. Я всегда мог создать их перед использованием, но тогда он все равно не обновит NTX, используемые всеми другими программами. Здесь взаимодействуют несколько тысяч программ, поэтому просто перейти на NDX невозможно, а у меня нет бюджета.

Итак, мой вопрос: есть ли способ заставить xbasej использовать индексы NTX или нет, есть ли какая-либо другая бесплатная библиотека Java, которая может автоматически обновлять файлы NTX, если я открою их все перед редактированием базы данных?

О, и я перенаправил порт 6262 и даже проверил с полностью отключенным брандмауэром.

Любая помощь будет принята с благодарностью.

Я нашел драйверы Sybase Advantage ссылка, которые, очевидно, могут открывать файлы DBF и NTX, я могу используйте их программу Data Architect для создания словаря данных для доступа к моим данным, но я не могу понять, как использовать его с Java, все примеры, похоже, требуют какого-то подключения к серверу. Что-то вроде этого должно работать:

try {
        Class.forName("com.extendedsystems.jdbc.advantage.ADSDriver");
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(DBFTest.class.getName()).log(Level.SEVERE, null, ex);
    }

    try {
        ADSConnection conn = (ADSConnection) DriverManager.getConnection("jdbc:extendedsystems:advantage://localhost:6262;catalog=//llama-rog/c/stock/DD.add;user=master;password=master");   
    }catch (SQLException ex) {        
        Logger.getLogger(DBFTest.class.getName()).log(Level.SEVERE, null, ex);
    }        
}

Каждый раз, когда я пытаюсь подключиться, я получаю:

com.extendedsystems.jdbc.advantage.ADSException: [iAnywhere Solutions][Advantage JDBC]Connection refused: connect
at com.extendedsystems.jdbc.advantage.n.<init>(Unknown Source)
at com.extendedsystems.jdbc.advantage.ADSConnection.<init>(Unknown Source)
at com.extendedsystems.jdbc.advantage.ADSDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:243)
at dbftest.DBFTest.main(DBFTest.java:30)

Я искал несколько часов и нашел абсолютно сухой пример кода для подключения к локальному словарю данных (.add), в котором перечислены мои DBF и связанные с ними индексы. Кто-то упомянул об использовании псевдонима, который Data Architect создает в ADS.ini, но опять же нет никаких следов того, как это сделать. Файл Jar не поставляется с javadoc, только с некоторыми файлами справки HTML, которые я просмотрел и ничего не нашел.

Существует тестовое приложение, которое предположительно позволяет вам тестировать соединения, но по-прежнему требует, чтобы я вводил свою строку подключения, имя пользователя и пароль, и ни через словари данных, ни через свободные таблицы я не могу подключиться к чему-либо, я всегда получаю ту же ошибку.

Кто-нибудь знает, как заставить это работать. Тот факт, что он работает через их инструмент архитектора данных, доказывает, что он должен как-то работать, но как именно я могу скопировать эту функциональность, я не знаю.


person feldoh    schedule 30.08.2012    source источник
comment
Индексы NTX взяты из CA-Clipper, старого языка программирования DOS. В то время как файлы .DBF являются стандартными для dBase III, индексные файлы представляют собой проприетарный формат, поэтому, если вы не найдете драйвер ODBC специально для баз данных Clipper, вам, вероятно, не повезло. (Большинство людей переключились на использование индексных файлов .CDX, совместимых с FoxPro 2.x, отчасти по этой причине. Другими причинами были составные индексы (несколько индексов в одном файле), сжатие, функция автоматического открытия и простая скорость.)   -  person Ken White    schedule 30.08.2012
comment
Да, вы совершенно правы, система изначально была построена с использованием DBaseIV в клипере (отсюда индексы клипера), но мой босс настаивает на том, чтобы время от времени писать программу клипера, несмотря на 64-битную несовместимость. Мне на самом деле не нужно, чтобы это была библиотека ODBC, я доволен тем, как это делает xbasej или что-то еще, я просто хочу иметь возможность обновлять индексы. Всякий раз, когда мы пишем новые программы, нам всегда приходится переиндексировать после каждое небольшое изменение, которое с учетом размера некоторых наших файлов занимает очень много времени.   -  person feldoh    schedule 30.08.2012
comment
Позвольте мне перефразировать то, что я сказал, чтобы было то, что я имел в виду. :-) так что, если вы не можете найти библиотеку Java, которая поддерживает базы данных Clipper. Как я уже сказал, формат .NTX сильно зависит от поставщика. Возможно, что-то из здесь поможет вам что-то найти. :-)   -  person Ken White    schedule 30.08.2012


Ответы (1)


Драйвер Advantage JDBC требует Advantage Database Server, который представляет собой клиент-серверную версию продукта. Основываясь на комментарии «нет бюджета», я предполагаю, что вы не приобрели сервер. Если это так, то JDBC-драйвер вам бесполезен. Вероятно, ошибка Connection refused возникает из-за отсутствия сервера, который мог бы принять соединение.

Если вы можете использовать мост ODBC, то одна из возможностей - использовать драйвер Advantage ODBC, который может подключаться к Advantage Local Server (версия без клиент-сервера, которая бесплатна в зависимости от вашего использования ... прочитайте лицензию ). У вас должна быть возможность установить драйвер Advantage ODBC, настроить источник данных, указывающий словарь данных (используя тот же путь, что и для Advantage Data Architect).

Вы, вероятно, уже сделали это, но когда вы создали словарь данных и добавили таблицы, убедитесь, что вы добавили соответствующие файлы .ntx для каждой таблицы. В противном случае Advantage не может определить, какие индексы принадлежат какой таблице.

person Mark Wilkins    schedule 02.09.2012
comment
Я могу использовать мост ODBC, поэтому я попробую это завтра. - person feldoh; 03.09.2012
comment
Да, это работало фантастически. Я создал ODBC-подключение к словарю данных Advantage и добавил несколько записей, и они сразу заработали без необходимости переиндексации. Это сводило меня с ума в течение нескольких месяцев, и в конце концов ответ был таким простым. - person feldoh; 05.09.2012
comment
В качестве примечания для будущих читателей: и JVM, и ODBC должны использовать одну и ту же архитектуру. Сначала я установил 64-битный ODBC с 32-битной JVM. Вы должны использовать c:\windows\sysWOW64\odbcad32.exe для настройки 32-битной версии на 64-битных окнах. - person feldoh; 05.09.2012
comment
@feldoh: Круто - спасибо, что сообщили о результатах. Я рад, что у тебя все получилось. - person Mark Wilkins; 05.09.2012