我想知道使用一个优于另一个的优点和缺点。这个问题源于我在这里得到的建议:Allocate buffer dynamically for DB query according to the record actual size
我正在寻找一份重要差异清单(而不是详尽的清单),这些清单将帮助我做出明智的决定。
我有win32 :: odbc的工作经验,可以真实地证明这一点。如果有人可以在“干”记录的细节之上分享他/她的经验,那将非常有帮助。
其他信息: Win32 :: ODBC的作者在这里写道:http://www.roth.net/perl/odbc/docs/ODBC_Docs.htm - “有几种Win32 :: ODBC可供选择,例如DBB :: ODBC的数据库接口(DBI)版本。这个ODBC Perl扩展可用于不同的像Mac和UNIX这样的平台。虽然它缺少Win32 :: ODBC所具有的一些功能,但它是用于ODBC访问数据库的好工具。“ 我想知道你是否知道它缺少什么功能。
答案 0 :(得分:4)
我选择DBI
堆栈的主要原因是灵活性和更广泛的测试人员/调试人员。使用DBI
,您可以选择使用专门针对特定数据库引擎的驱动程序。是的,大多数数据库还提供ODBC驱动程序,但某些特定功能可能不可用或通过该特定API更麻烦。此外,DBI
与平台无关,使得任何可能的未来移植到另一个操作系统的麻烦要小得多。最后,使用DBI
进行数据库访问远的人群超过使用Win32::ODBC
的人群,这意味着可能会发现错误&修补得更快。
查看您的其他链接问题,我注意到您正在使用Oracle。使用DBI
,您可以选择使用DBD::ODBC
或DBD::Oracle
。您可以通过简单更改DBI->connect
方法的其中一个参数来进行此选择。
如果您使用的是Oracle即时客户端,使用DBD::Oracle
可以省去在只需要通过Perl访问的计算机上下载/安装ODBC组件的麻烦。当然,从等式中删除ODBC层也可能有好处。
<小时/> 的更新强>: Win32 :: ODBC是ODBC中间件API从C到Perl的相对直接的转换。如果您愿意将自己限制在Windows上的ODBC连接,那么它确实具有相对较小的优势,可以让您更直接地控制控制底层数据库的ODBC中间件层。这当然并不意味着ODBC API特别忠实于底层数据库的API和/或功能。
再次,假设您正在使用Oracle,您似乎有3个选择:
Win32::ODBC
- &gt; ODBC - &gt; Oracle的ODBC驱动程序〜&gt; Oracle客户端 - &gt; Oracle服务器DBI
- &gt; DBD::Oracle
〜&gt; Oracle客户端 - &gt; Oracle服务器DBI
- &gt; DBD::ODBC
〜&gt; ODBC - &gt; Oracle的ODBC驱动程序〜&gt; Oracle客户端 - &gt; Oracle服务器&#39;〜&gt;&#39;是在一个需要&#34; shim&#34;的层的右边。一个API适合另一个。
现在我可以理解你是否发现了对ODBC中间件的API保真度。就个人而言,我宁愿拥有DBI
&amp;的灵活性。 DBD::Oracle
使用的较短的软件堆栈。虽然我还猜测涉及DBD::ODBC
的较长堆栈将满足所有需求的99%以上,即使有两个垫片层。
DBI
&amp;之间的另一个区别Win32::ODBC
是围绕DBI
堆栈构建的许多模块。整个DBIx
命名空间依赖于它。在metacpan.org上搜索每个模块,然后单击“反向依赖”&#39;链接在他们的页面上,您将获得Perl社区为每个人分配的相对价值的清晰图片。
因此,如果您想要一个额外的,纯粹自私的理由:具有DBI经验的Perl开发人员也会发现自己需要更多 。严重。