我正在学习数据库课程,我必须编写一个命令行应用程序。教授希望我们编写一个 ESQL(嵌入 SQL)应用程序。
我有一种感觉,这种技术被贬低了。
我们必须使用 oracle 预编译器来翻译 c++ 中的 esql 代码。这种应用程序看起来很难维护。
php 应用程序也可以很好地工作,但他们可能希望命令行应用程序更快地进行评分(使用输入提要进行单元测试)。大家怎么看,Embed SQL 是在业界使用的,值得请教授做一个java 应用吗?还有其他更合适的技术吗?
我正在学习数据库课程,我必须编写一个命令行应用程序。教授希望我们编写一个 ESQL(嵌入 SQL)应用程序。
我有一种感觉,这种技术被贬低了。
我们必须使用 oracle 预编译器来翻译 c++ 中的 esql 代码。这种应用程序看起来很难维护。
php 应用程序也可以很好地工作,但他们可能希望命令行应用程序更快地进行评分(使用输入提要进行单元测试)。大家怎么看,Embed SQL 是在业界使用的,值得请教授做一个java 应用吗?还有其他更合适的技术吗?
嵌入式 SQL 是在“过去”(C++ 尚未发明)期间用 C 语言执行 SQL 最流行的方式之一。
这些天大部分时间我们将使用 ORM 库。不再建议使用嵌入式 SQL,因为正如您所说的那样,它依赖于专有的预处理器,并且使代码难以调试、管理和维护。它还将您与一个单一的数据库供应商挂钩,您的代码将非常难以移动到另一个数据库后端。通常,我们不会在“现实生活”中这样做。
但由于它只是一门课,你的教授可能有兴趣教你 SQL 和数据库概念。嵌入式 SQL 只是一个工具。你应该学习 SQL 和数据库,而不是 C++ 中的嵌入式 SQL。
但是,我相信您在询问 PHP 和 Java 时忽略了重点。更不用说 PHP 是一种脚本语言,而 Java 是另一种可以(可能)为嵌入式 SQL 编写处理器的语言。
因此,您关于嵌入式 SQL 的观点实际上与语言选择无关。它与(1)带有预处理器的专有嵌入式系统,(2)使用 ORM 库或数据访问库(例如 ODBC)之间的权衡和平衡有关。
题外话:
我在大学时第一次开始使用嵌入式 SQL(大约是 30 年前!)。实际上在大学毕业后得到了编程工作并且仍在使用它,但显然它正在退出。自 1990 年左右以来从未见过它使用过。
是的,但是没有。在我从事该领域的 10 年中,我没有遇到过任何一行嵌入式 SQL。我想说(并希望)这项技术只存在于(某些)遗留系统中。
如今,行业中与数据库相关的发展将涉及:
恕我直言,应该根除自制解决方案,但它们比您想象的更常见。其中一部分肯定与学生在学校只尝试过过时和不适应的工具有关......
ORM(和数据访问层)相关的问题可能非常复杂,我会说非常有趣。特别是如果你是学生。我建议深入研究Martin Fowler 的 P of EAA。
在 C++ 中,我会看看SOCI。
我们必须在这里维护一个旧系统(20 岁及以上)。
ESQL在这里被大量使用。我们在将软件移动到使用 ESQL 代码的新操作系统(它是一个 15 年前的 hpux)时遇到的大多数问题。
我们正在编写的新软件都在使用 C++ 库。这为我们提供了更具可读性的代码 + 我们的 IDE 不会一直说“无效语法”。等等。一般来说,C++ 库与我连接到 .NET 或 Java 数据库的方式非常相似。
使用 C++ 库可以提高速度(如果使用得当)并且错误更少。
我认为 ESQL 已被弃用。但是由于我们已经进入了一个很多编写软件都是为了更新/升级或维护现有系统的时代,所以对旧技术有基本的了解是非常方便的!
我已经有 10 年没有在应用程序中看到嵌入式 SQL 了。我最后一次看到它是在一个用 COBOL 编写的遗留大型机应用程序中。是的,仍在电力公司使用。
我这些天做的小 C++ 编程不涉及 SQL。这些天来,我遇到的大多数关系数据库编程都是其中之一:
虽然这可能已经过时了(我在大约 15-20 年前也做过 ESQL),但它仍然可以作为如何处理事情的一个很好的例子——即使它只是为了让你之后更喜欢 ORM。
另外,根据我的理解,.NET 中的 LINQ 与将 SQL 嵌入宿主语言的想法有些相似——而且 LINQ 似乎很流行。
从中提取到更广泛的 CS,嵌入式 DSL 似乎是当前的研究主题,因此 ESQL 作为早期版本的示例与当今世界相去甚远。
ESQL 是为 IBM 中间件产品大量传播的主要语言。它不是面向对象的语言,而是过程语言。它在某些地方广泛用于在 XML(XSLT 的别名)之间进行映射。
截至目前,我在 Informix 9.x 数据库中使用 ESql,这是我在工作中处理的遗留 C++ 应用程序代码。
虽然我同意每个人的观点,这是一种古老的技术,并且有更好的选择,但我仍然会说它是一种非常简洁的技术。好的部分是 SQL 作为 C/C++ 代码流的一部分嵌入到语法和逻辑方面。ESql 的语法变化很小,很容易学习,因此我说使用它很有趣。
就像 Heiko 提到的,LINQ 在想法上与 ESql 很接近。