NTX或NDX文件版

时间:2013-02-26 17:16:16

标签: java xbase

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

  

org.xBaseJ.xBaseJException:找不到字段t

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文件?
  3. 我真的需要一些帮助: - (

1 个答案:

答案 0 :(得分: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驱动程序 转到“数据源(ODBC)”(在Windows的控制面板中),单击“系统DSN”选项卡,然后单击“添加”,选择“优化”,简化SQL ODBC,为其命名(此名称将在代码中使用,因此将要么是静态的,要么放在配置文件中/作为参数传递,勾选“数据字典”并浏览到与DBF在同一文件夹中创建的步骤(2)的.ADD文件:

表类型= Clipper 优势锁定=兼容 可用服务器类型=(仅选择本地服务器[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

显然,你可以非常高兴地使用像"INSERT INTO myDBF (RUT, RS, TIPO, TDOC) VALUES ('123456', 'SomeCompany', '2', '6');"这样的语句来做你的例子。

所以在初始设置之后,它真的很容易:)希望这有帮助,因为我花了几个月才找到这个解决方案,我还没有遇到过在Java中使用NTX索引的任何其他方式。