6

我正在学习数据库课程,我必须编写一个命令行应用程序。教授希望我们编写一个 ESQL(嵌入 SQL)应用程序。

我有一种感觉,这种技术被贬低了。

我们必须使用 oracle 预编译器来翻译 c++ 中的 esql 代码。这种应用程序看起来很难维护。

php 应用程序也可以很好地工作,但他们可能希望命令行应用程序更快地进行评分(使用输入提要进行单元测试)。大家怎么看,Embed SQL 是在业界使用的,值得请教授做一个java 应用吗?还有其他更合适的技术吗?

4

7 回答 7

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 年左右以来从未见过它使用过。

于 2011-04-07T05:48:02.940 回答
4

是的,但是没有。在我从事该领域的 10 年中,我没有遇到过任何一行嵌入式 SQL。我想说(并希望)这项技术只存在于(某些)遗留系统中。

如今,行业中与数据库相关的发展将涉及:

  • 使用 JDBC、ADO .NET、OLE DB、ODBC 或本机库(在您的情况下为OCCI )直接访问数据库。
  • 某种ORM(休眠、实体框架或自制解决方案)。
  • 某种基于框架和/或模式的数据访问层(想想 Ruby on Rails、Active Record或自制解决方案)。

恕我直言,应该根除自制解决方案,但它们比您想象的更常见。其中一部分肯定与学生在学校只尝试过过时和不适应的工具有关......

ORM(和数据访问层)相关的问题可能非常复杂,我会说非常有趣。特别是如果你是学生。我建议深入研究Martin Fowler 的 P of EAA

在 C++ 中,我会看看SOCI

于 2011-04-01T07:28:39.797 回答
4

我们必须在这里维护一个旧系统(20 岁及以上)。

ESQL在这里被大量使用。我们在将软件移动到使用 ESQL 代码的新操作系统(它是一个 15 年前的 hpux)时遇到的大多数问题。

我们正在编写的新软件都在使用 C++ 库。这为我们提供了更具可读性的代码 + 我们的 IDE 不会一直说“无效语法”。等等。一般来说,C++ 库与我连接到 .NET 或 Java 数据库的方式非常相似。

使用 C++ 库可以提高速度(如果使用得当)并且错误更少。

我认为 ESQL 已被弃用。但是由于我们已经进入了一个很多编写软件都是为了更新/升级或维护现有系统的时代,所以对旧技术有基本的了解是非常方便的!

于 2011-04-06T10:52:19.143 回答
2

我已经有 10 年没有在应用程序中看到嵌入式 SQL 了。我最后一次看到它是在一个用 COBOL 编写的遗留大型机应用程序中。是的,仍在电力公司使用。

我这些天做的小 C++ 编程不涉及 SQL。这些天来,我遇到的大多数关系数据库编程都是其中之一:

  1. ORM(对象关系映射 - hibernate 或 JPA)
  2. JDBC
  3. 存储过程(oracle 或 mySQL)
于 2011-04-01T02:28:28.870 回答
1

虽然这可能已经过时了(我在大约 15-20 年前也做过 ESQL),但它仍然可以作为如何处理事情的一个很好的例子——即使它只是为了让你之后更喜欢 ORM。

另外,根据我的理解,.NET 中的 LINQ 与将 SQL 嵌入宿主语言的想法有些相似——而且 LINQ 似乎很流行。

从中提取到更广泛的 CS,嵌入式 DSL 似乎是当前的研究主题,因此 ESQL 作为早期版本的示例与当今世界相去甚远。

于 2011-04-07T11:27:04.223 回答
1

ESQL 是为 IBM 中间件产品大量传播的主要语言。它不是面向对象的语言,而是过程语言。它在某些地方广泛用于在 XML(XSLT 的别名)之间进行映射。

于 2014-08-28T14:44:38.747 回答
0

截至目前,我在 Informix 9.x 数据库中使用 ESql,这是我在工作中处理的遗留 C++ 应用程序代码。

虽然我同意每个人的观点,这是一种古老的技术,并且有更好的选择,但我仍然会说它是一种非常简洁的技术。好的部分是 SQL 作为 C/C++ 代码流的一部分嵌入到语法和逻辑方面。ESql 的语法变化很小,很容易学习,因此我说使用它很有趣。

就像 Heiko 提到的,LINQ 在想法上与 ESql 很接近。

于 2013-04-08T21:13:54.673 回答