我自己也有这个确切的问题。所以显然 NTX 文件是一种专有格式,因此开源 xBaseJ 不能使用它们。如果您不想更新任何索引,它可以工作,否则您必须找到另一种解决方案......幸运的是,我有一个对我有用的解决方案:
注意:这在 Mac 上可能有点不同,我不知道,因为我没有自己的,但如果你需要我确定你可以解决任何差异。在 Linux 上也可能有所不同,我的 Linux 机器现在已经死了,所以恐怕我无法测试它,我只需要在 Windows 上进行这项工作。
(1) 收集资源:转到此处:http ://devzone.advantagedatabase.com/dz/content.aspx?Key=20&Release=19
下载 Data Architect 实用程序和 ODBC 驱动程序(其他驱动程序之一也可以工作,但如果您想使用 JDBC 驱动程序您必须实际购买 Advantage 数据库服务器,ODBC 驱动程序是免费的,您可以选择)
(2) 描述数据库:现在打开数据架构实用程序并创建一个新的数据字典(文件菜单)。选择本地服务器作为服务器类型,将数据库设置为包含 DBF 的文件夹。在您的新字典中右键单击表并选择“添加现有”,从打开的对话框中的类型下拉列表中选择 DBF 表(默认情况下隐藏它们)并选择您的 dbfs。选择 Clipper 作为表格类型,然后为您的表格按 OK。接下来,右键单击每个表并选择添加现有索引并为其提供 NTX 索引以供其使用。现在,如果您使用数据架构师编辑文件,它将更新索引。
(3) 设置ODBC驱动 进入“Data Sources (ODBC)”(在Windows的控制面板中)点击System DSN选项卡,然后点击add,选择Advantage,streamline SQL ODBC,给它起一个名字(这个名字将在代码中使用,因此需要是静态的或放入配置文件/作为参数传递),勾选“数据字典”并浏览到与步骤(2)在同一文件夹中创建的 .ADD 文件DBF:
表类型 = Clipper Advantage Locking = 兼容的可用服务器类型 =(仅选择本地服务器 [ALS],除非您购买了实际的优势服务器)
剩下的选项应该是(我没有提到的那些不应该有所作为。
(4) 一些示例 Java 代码
String dbfConnectionUrl = "jdbc:odbc:SML_ODBC"; //Set the ODBC URL
Connection dbfCon = null; //A connection
PreparedStatement dbfUpd = null; //I am using a prepared statement here but jsut regular statements work just as well
dbfCon = DriverManager.getConnection(dbfConnectionUrl); //Connect to the database, NOT the DBF, the database is the folder containing all the DBFs
dbfUpd = dbfCon.prepareStatement("UPDATE DBFName SET OPENVOL = ?, SLPERVOL = 0, TFPERVOL = 0 WHERE SCAN = ? AND STORE = ?"); //Then use regular old SQL same as any other JDBC driver, note that you use the name of the DBF (.DBF not needed) as the table names.
//Setting my variables
dbfUpd.setBigDecimal(1, 10);
dbfUpd.setString(2, "0000000000001");
dbfUpd.setString(3, "02"));
dbfUpd.executeUpdate(); //Update
显然,您可以很高兴地使用语句 like"INSERT INTO myDBF (RUT, RS, TIPO, TDOC) VALUES ('123456', 'SomeCompany', '2', '6');"
来做您的示例。
所以在初始设置之后,它真的很容易:) 希望这会有所帮助,因为我花了几个月的时间才找到这个解决方案,而且我还没有遇到在 Java 中使用 NTX 索引的任何其他方式。