我有一个客户端使用我需要读/写的FoxPro数据库。我知道大多数建议都是替换FoxPro',但这不是一个选项。
我尝试使用JStels DBF JDBC Driver和JavaDBF Framework写入DBF文件。这两个都工作,但它在另一端遇到错误需要重新索引FoxPro表。似乎这些现有框架都不允许重新索引CDX文件。我也研究了XBaseJ,但它明确指出它不支持FoxPro索引,所以我没有进一步追求它。有没有人知道我可以完成写入FoxPro DBF文件的方法,然后强制表重建索引(CDX)?
答案 0 :(得分:0)
你提到的两个'驱动程序'都被严重破坏 - 它们使用低级文件写入将数据压入DBF,而不考虑索引,触发器,记录/文件锁定等内容。
在Windows下,您可以使用Microsoft的free ODBC or OLEDB drivers for VFP;在其他平台上,事情变得更加复杂。
如果绝对有必要从无法使用VFP运行时或兼容驱动程序的平台写入数据,则最好将更新写入可以合并到兼容平台上的主表的单独表中。当然,这是否可行取决于更新的性质。
穷人的文件锁定 - 以临时名称创建文件,仅在完成后重命名为“活动”名称 - 可用而无需访问低级别,系统相关的文件锁定API。这可以扩展为创建安全的处理管道,文件系统作为唯一的进程间通信介质。即使用可以编写DBF的任何旧驱动程序从Java写入更新,将表从其临时名称重命名为活动名称(魔术前缀,等等); Windows框上的更新程序进程看到活动文件名,重命名为临时,将更新合并到主表中,然后重命名为被动名称,表示“已完成并已粉碎”。
这样你可以在Java下使用你想要的任何驱动程序,但主表只会被不破坏表完整性的兼容引擎(驱动程序/运行时)所触及。
PS:在使用不兼容的更新来更新表之后重建索引可以像向Fox运行时(在Fox应用程序或其中一个Fox驱动程序中)发送“REINDEX”命令一样简单,但它会创建一个后勤噩梦,其中记录/文件锁定必须通过管理措施来完成。例如。 “大家都关闭了$ FOO程序吗?我想运行更新。”,“在我完成更新并重建索引之前不要触摸该程序!”等等。