连接 Open Office Base 应用程序到 SQL

作者:Mike Diehl

在我的上一篇文章《Open Office Base 的快速入门》中,我描述了我在 Open Office Base 中为我的妻子构建一个简单的数据库应用程序的初步体验,我之前没有使用过该程序。在那篇文章中,我描述了入门有多么容易,以及使用 Base 构建可用的软件有多么容易。在本文中,我将讨论通过将 Base 连接到外部 SQL 后端来缓解 Base 的主要弱点之一。

在我完成程序并向我的妻子演示后不久,我遇到了 Base 的主要限制之一。我将数据库文件放在一个共享的“文档”目录中,以便她和我都可以访问该程序,那时就出问题了。当我回到我的办公桌继续工作时,收到一条错误消息,指示该文件已被锁定且无法访问。事实证明,Base 不允许同时访问给定的数据库。当我妻子的企业销售额达到数百万美元,员工人数达到数百人时,这个限制可不是什么好兆头!(好吧,谁还不能做做梦呢?)

因此,解决这个问题的方法是将数据库应用程序连接到外部 RDBMS,例如 PostgreSQL 或 Mysql。通过将实际数据存储在外部数据库服务器上,我还获得了其他优势。首先,我在管理大型 PostgreSQL 和 Mysql 数据库方面拥有经验。这意味着我可以利用我已经掌握的技能来管理和维护我妻子的程序。我还可以有一天将应用程序迁移到 Web,因为基于 Web 的数据库访问在当今很常见。总而言之,这比单用户数据库是一个更好的解决方案。

然而,Base 没有内置支持连接到 Mysql 或 PostgreSQL。对该主题进行少量研究后发现,我有几种方法可以完成此连接。 我可以使用 Linux ODBC 驱动程序。 我可以使用 Java 的 JDBC 驱动程序。 或者,我可以使用 Open Office 的 SDBC 驱动程序。

我的第一个想法是使用 ODBC 驱动程序,因为它无处不在。 然而,我最初的研究表明,每次我想添加新的数据源时,我都必须对 /etc/odbcinst.ini 进行大量更改,在每台需要连接到新数据源的机器上都进行更改。 坦率地说,这根本没有吸引力。

JDBC 驱动程序不需要在 /etc 中配置,但也好不到哪儿去。 从我读到的内容来看,我必须将驱动程序指向一个适用于我要连接的数据库类型的 .jar 文件。 在这种情况下,这将是一个特定于 PostgreSQL 的 .jar 文件。 然后我必须通过将另一个参数的值设置为 org.postgresql.Driver 来告诉 JDBC 驱动程序在哪里找到该驱动程序,这似乎是多余的。 这看起来像是一项繁琐的工作,而这应该是一个简单的操作,即连接到数据库。

当然,配置 ODBC/JDBC 驱动程序并不是什么大不了的事,如果我必须这样做,我可以完成它,但 SDBC 选项的安装和配置简直太简单了。 首先,我必须从 http://dba.openoffice.org/drivers/postgresql/index.html 下载一个 .zip 文件。 然后,在启动 Base 后,我转到“工具”菜单下的“扩展管理器”。 我所要做的就是将扩展管理器指向 .zip 文件并重新启动 Base。 Base 重新启动后,我就可以选择 PostgreSQL 作为数据源了。 该驱动程序需要有关我要连接的数据库的信息。 此信息采用连接字符串的形式

dbname=mydatabase host=example.com

按下“下一步”按钮后,我就可以提供用户名和密码了。 这就是我所要做的全部。

在处理我妻子的程序之前,我决定连接我自己的数据库之一进行测试。 果然,它连接成功了,我能够看到所有表,尽管发现我也可以看到除了正常的“public”模式之外的其他数据库模式,这有点令人不安。 当我进入表模式并尝试打开一个我知道有超过 4 万条记录的表时,几秒钟后,数据就出现了。 对于位于另一个州的服务器上的数据库来说,还不错!

冒着引发宗教战争的风险,我不得不说我真的更喜欢使用 PostgreSQL,但因为它没有我所知的健全的复制机制,所以我正在考虑将我的运营迁移到 Mysql。 所以,我想借此机会了解一下 Base 对 Mysql 的支持。

当我启动 Base 时,我注意到它提供了连接到 Mysql 数据库的选项。 然而,当我单击该选项时,我意识到它想通过 ODBC/JDBC 连接,这不是我想要的。 稍微搜索一下,我找到了一个 Mysql 的原生驱动程序,网址为 http://extensions.services.openoffice.org/en/node/2415。 这个驱动程序的安装与 PostgreSQL 驱动程序一样容易。 安装后,会出现一个新选项,允许用户直接连接到 Mysql 数据库。 在这种情况下,不需要神奇的连接字符串。 您只需填写服务器、数据库和用户字段即可开始使用。

因此,PostgreSQL 和 Mysql 都存在原生驱动程序,而且它们都非常易于设置和使用。 这就引出了手头的最后一项任务:从原生 Base 数据管理系统迁移到新的外部 DBMS 之一。 事实证明,这项任务真的没有那么难,但对于具有许多表、查询和表单的数据库来说,这可能会有点乏味。

为了执行此迁移,我们必须创建并打开一个新的 Base 数据库,该数据库绑定到 PostgreSQL 或 Mysql 数据库。 然后我们在 Base 中打开旧数据库。 从那里,我们可以将表单从旧文件复制并粘贴到新文件。 然后我们可以打开旧文件中的每个表,选择所有记录,并将它们复制到新文件的表列表中。 粘贴数据后,您将看到几个对话框,允许您选择要导入的字段,并调整这些字段的数据类型。 最后,数据传输完成,您就完成了。 然而,乏味之处可能在于您必须单独复制粘贴每个表,如果您的数据库有很多表... 嗯,您明白我的意思。

我对这种复制粘贴方法的可扩展性感到好奇,所以我用我之前提到的 4 万条记录的数据集进行了尝试。 我发现它运行得非常好,即使我是在最不利的条件下完成的。 我通过互联网从远程服务器将数据导入到 NFS 挂载目录上的数据库文件中。 如果您按小时收费,那很好,但如果您按完成工作收费,那就不太好了。 为了高效地完成迁移,您需要尽量保持本地化。

我还发现 PostgreSQL 对其认为有效的数据更加挑剔。 当我将我妻子的应用程序中的几个表导入到新的 PostgreSQL 服务器时,我收到了关于数据违反“非空”约束的错误。 当然,Base 本来就不应该允许我创建违反此类约束的数据。 看来我需要进行一些数据清理才能完成此迁移。

因此,将应用程序从原生 Base 数据库管理系统迁移到 PostgreSQL 或 Mysql 非常容易且直观。 例如,通过 NFS 在网络上分发生成的 Base 文件,您可以获得并发访问能力。 但由于这在很大程度上是一个手动过程,我建议您尽早在项目中执行迁移。

加载 Disqus 评论