从Java写入FoxPro数据库

从Java写入FoxPro数据库,java,jdbc,foxpro,read-write,Java,Jdbc,Foxpro,Read Write,我有一个客户使用我需要读/写的FoxPro数据库。我知道大多数建议是“替换FoxPro”,但这不是一个选项 我尝试使用,并写入DBF文件。这两种方法都有效,但在另一端遇到错误,需要重新索引FoxPro表。这些现有框架似乎都不允许对CDX文件进行重新索引。我也研究过,但它明确表示它不支持FoxPro索引,所以我没有进一步研究它。有人知道我可以用什么方法来完成写入FoxPro DBF文件,然后强制表重建索引(CDX)?您提到的两个“驱动程序”都坏得很厉害-它们使用低级文件写入将数据写入DBF,而不考

我有一个客户使用我需要读/写的FoxPro数据库。我知道大多数建议是“替换FoxPro”,但这不是一个选项


我尝试使用,并写入DBF文件。这两种方法都有效,但在另一端遇到错误,需要重新索引FoxPro表。这些现有框架似乎都不允许对CDX文件进行重新索引。我也研究过,但它明确表示它不支持FoxPro索引,所以我没有进一步研究它。有人知道我可以用什么方法来完成写入FoxPro DBF文件,然后强制表重建索引(CDX)?

您提到的两个“驱动程序”都坏得很厉害-它们使用低级文件写入将数据写入DBF,而不考虑索引、触发器、记录/文件锁定等

在Windows下,您可以使用Microsoft的;在其他平台上,事情变得复杂得多

如果绝对有必要从不能使用VFP运行时或兼容驱动程序的平台写入数据,则最好将更新写入一个单独的表,该表可以合并到兼容平台上的主表中。当然,这是否可能取决于更新的性质

Poor man的文件锁定-使用临时名称创建文件,仅在完成后重命名为“活动”名称-无需访问低级别、依赖于系统的文件锁定API。这可以扩展为创建一个安全的处理管道,将文件系统作为唯一的进程间通信介质。即,使用任何可以写入DBF的旧驱动程序从Java写入更新,将表从其临时名称重命名为活动名称(魔法前缀,无论什么);Windows框上的更新程序进程会看到活动文件名,重命名为临时文件名,将更新合并到主表中,然后重命名为被动名称,表示“已完成并清理”

这样,您就可以在Java下使用您想要的任何驱动程序,但主表只会被不破坏表完整性的兼容引擎(驱动程序/运行时)触及


注意:在标记具有不兼容更新的表后重建索引可能非常简单,只需向Fox运行时(在Fox应用程序或Fox驱动程序中)发送“REINDEX”命令即可,但这会造成逻辑噩梦,记录/文件锁定必须通过管理措施来完成。例如,“每个人都关闭了$FOO程序了吗?我想运行一个更新。”、“在我完成更新并重建索引之前不要碰那个程序!”等等。pp.

你知道数据库来自哪个版本的FoxPro吗?VFP6之后发生了一些变化,这意味着您必须有一个针对更高版本的驱动程序。FoxPro数据库是9.0或更高版本。我不确定具体是哪个版本,但我知道它是9.0之后的版本。该数据库属于我无法控制的第三方系统。在这种情况下,您需要找到一个明确表示支持VFP 9数据库的驱动程序。您可以尝试用数据库索引替换陈旧的FoxPro cdx索引;FoxPro可能能够转换该索引。机会很小,但作为数据库克隆的FoxPro可能正好能够实现。几年前,我为一家公司工作,该公司使用IDS服务器(一种3型JDBC驱动程序)连接到FoxPro ODBC驱动程序;但IDS服务器不是免费的,每个部署iirc都需要许可证。