【问题标题】:Write to FoxPro Database from Java从 Java 写入 FoxPro 数据库
【发布时间】:2014-11-02 00:40:26
【问题描述】:

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

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

【问题讨论】:

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

标签: java jdbc foxpro read-write


【解决方案1】:

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

在Windows下可以使用微软的free ODBC or OLEDB drivers for VFP;在其他平台上,事情变得复杂得多。

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

穷人的文件锁定 - 以临时名称创建文件,仅在完成后重命名为“活动”名称 - 无需访问低级的、系统相关的文件锁定 API 即可使用。这可以扩展为创建一个安全的处理管道,文件系统作为唯一的进程间通信介质。 IE。使用任何可以编写 DBF 的旧驱动程序从 Java 写入更新,将表从其临时名称重命名为活动名称(魔术前缀等); Windows 机器上的更新程序进程看到活动文件名,重命名为临时文件名,将更新合并到主表中,然后重命名为被动名称,表示“完成并除尘”。

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

PS:在使用不兼容的更新对表进行 b0rkening 后重建索引可以像向 Fox 运行时(在 Fox 应用程序或其中一个 Fox 驱动程序中)发送“REINDEX”命令一样简单,但它会造成后勤噩梦,其中记录/文件锁定必须通过管理措施来完成。例如。 “每个人都关闭了 $FOO 程序吗?我想运行更新。”、“在我完成更新并重建索引之前不要碰那个程序!”等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2014-07-04
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多