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