Java 将xbasej与NTX索引一起使用

Java 将xbasej与NTX索引一起使用,java,indexing,vb6-migration,dbf,advantage-database-server,Java,Indexing,Vb6 Migration,Dbf,Advantage Database Server,我试图将Java中的DBF文件用于与大型旧系统交互的较新实用程序。我可以使用JavaODBC桥访问、读取、写入和更新,但这不会更新NTX索引。我发现xbasej声称能够使用索引,但似乎只能使用NDX索引。我可以在使用它们之前创建它们,但它仍然不会更新所有其他程序使用的NTX。这里有几千个程序在交互,所以切换到NDX是不可能的,我也没有预算 所以我的问题是:有没有办法让xbasej使用NTX索引,或者如果我在编辑数据库之前打开NTX文件,有没有其他免费的Java库可以自动更新NTX文件 哦,我已经

我试图将Java中的DBF文件用于与大型旧系统交互的较新实用程序。我可以使用JavaODBC桥访问、读取、写入和更新,但这不会更新NTX索引。我发现xbasej声称能够使用索引,但似乎只能使用NDX索引。我可以在使用它们之前创建它们,但它仍然不会更新所有其他程序使用的NTX。这里有几千个程序在交互,所以切换到NDX是不可能的,我也没有预算

所以我的问题是:有没有办法让xbasej使用NTX索引,或者如果我在编辑数据库之前打开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)
com.extendedsystems.jdbc.advantage.ADSException:[iAnywhere Solutions][advantage jdbc]连接被拒绝:连接
位于com.extendedsystems.jdbc.advantage.n.(未知来源)
位于com.extendedsystems.jdbc.advantage.ADSConnection。(未知来源)
位于com.extendedsystems.jdbc.advantage.ADSDriver.connect(未知源)
位于java.sql.DriverManager.getConnection(DriverManager.java:579)
位于java.sql.DriverManager.getConnection(DriverManager.java:243)
位于dbftest.dbftest.main(dbftest.java:30)
我搜索了几个小时,找到了所有连接到仅本地数据字典(.add)的示例代码,其中列出了我的DBF和相关索引。有人提到使用数据架构师在ADS.ini中创建的别名,但同样没有关于如何做到这一点的线索。Jar文件没有javadoc,只有一些HTML帮助文件,我已经浏览了一遍,没有发现任何东西

有一个测试应用程序可以让你测试连接,但仍然需要我输入连接字符串、用户名和密码,而且无论是通过数据字典还是自由表,我都无法连接到任何东西,我总是会遇到同样的错误


有人知道如何让它工作吗。它通过他们的data architect工具工作的事实证明它应该以某种方式工作,但我不知道如何复制该功能。

Advantage JDBC驱动程序需要Advantage Database Server,它是该产品的客户机-服务器版本。根据评论“没有预算”,我猜你还没有购买服务器。如果是这种情况,那么JDBC驱动程序将对您没有任何用处。似乎发生了
连接被拒绝
错误,因为没有服务器接受连接

如果您能够使用ODBC网桥,那么一种可能是使用Advantage ODBC驱动程序,该驱动程序可以连接到Advantage本地服务器(非客户端服务器版本,根据您的使用情况免费提供…请阅读许可证)。您应该能够安装Advantage ODBC驱动程序,设置指定数据字典的数据源(使用与Advantage data Architect相同的路径)


您可能已经这样做了,但是在创建数据字典并添加表时,请确保为每个表添加了适当的.ntx文件。Advantage无法确定哪些索引属于哪个表。

NTX索引来自旧的DOS编程语言CA Clipper。虽然.DBF文件是标准的dBase III,但索引文件是一种专有格式,因此除非您能找到专门用于Clipper数据库的ODBC驱动程序,否则您可能会走运。(大多数人之所以改用与FoxPro 2.x兼容的.CDX索引文件,部分原因是因为这个原因。其他原因是复合索引(单个文件中有多个索引)、压缩、自动打开功能和普通速度。)是的,你说得很对,系统最初是在clipper中使用DBaseIV构建的(因此使用clipper索引)尽管64位不兼容,我的老板还是坚持偶尔编写clipper程序。我真的不需要它成为ODBC库,我很高兴xbasej是如何做到这一点的,我只是希望能够更新索引。每当我们编写新程序时,我们总是要在每一次小的更改后重新编制索引,而更改某些文件的大小需要很长时间。让我将我所说的话重新表述为我的意思。:-)“所以除非你能找到一个支持Clipper数据库的Java库”。正如我所说,.NTX格式是非常特定于供应商的。也许其中的一些会帮助您找到一些东西。:-)我可以使用ODBC桥接器,所以我明天会尝试。是的,这非常有效。我创建了一个到Advantage data dictionary的ODBC连接,并添加了一些记录,它们可以立即工作,而无需重新编制索引。这让我疯狂了好几个月,最终的答案非常简单。作为未来读者的注意事项,JVM和ODBC必须使用相同的体系结构,我最初将64位ODBC与32位JVM设置为同一体系结构。您必须使用c:\windows\sysWOW64\odbcad32.exe在64位windows上配置32位版本。@feldoh:Cool-感谢您报告结果。我很高兴你让它工作了。