0

我想我会放弃,我试图使用 XBaseJ 编辑 NTX 文件,但我收到了这个错误:

org.xBaseJ.xBaseJException:找不到字段

api说

org.xBaseJ Index 中定义的字段与数据库中的字段不匹配

但是字段是一样的。

这是我的代码:

DBF db = new DBF("C:/somepath/myDBF.dbf");

db.useIndex("C:/somepath/pc1.ntx", "rut");
db.useIndex("C:/somepath/pc2.ntx", "rs");

db.getField("RUT").put("123456");
db.getField("RS").put("SomeCompany");
db.getField("TIPO").put("2");
db.getField("TDOC").put("6");

db.write();
  1. 有没有人也有这个错误?
  2. 有没有人尝试过使用 java 编辑 ndx 或 ntx 文件?

请在这里我真的需要一些帮助:-(

4

1 回答 1

0

我自己也有这个确切的问题。所以显然 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 索引的任何其他方式。

于 2013-03-01T11:50:00.973 回答