嵌入式SQL,如Java等OO语言

Ste*_*aux 7 java sql preprocessor

让我在OO语言中使用SQL的一件事就是必须在字符串中定义SQL语句.

当我以前在IBM大型机上工作时,这些语言使用SQL预处理器来解析本机代码中的SQL语句,因此语句可以用明文SQL编写而不会混淆字符串,例如在Cobol中有一个EXEC SQL. ... END-EXEC语法结构,它允许纯SQL语句可以嵌入在COBOL代码.

<pure cobol code, including assignment of value
 to local variable HOSTVARIABLE>    

EXEC SQL
       SELECT COL_A, COL_B, COL_C
       INTO :COLA, :COLB, :COLC
       FROM TAB_A
       WHERE COL_D = :HOSTVARIABLE
END_EXEC

<more cobol code, variables COLA, COLB, COLC have been set>
Run Code Online (Sandbox Code Playgroud)

...这使得SQL语句非常容易阅读并检查错误.在EXEC SQL .... END-EXEC令牌之间没有对缩进,换行等的限制,因此您可以根据品味格式化SQL语句.

请注意,此示例适用于单行选择,当需要多行结果集时,编码不同(但仍然易于阅读).

所以,以Java为例

  1. 是什么让"旧COBOL"方法不受欢迎?不仅是SQL,而且使用这种方法可以使系统调用更具可读性.我们称之为嵌入式外语预处理器方法.

  2. SQL 的嵌入式外语预处理器是否可用于实现?您是否看到能够在Java代码中编写本机SQL语句的好处?

编辑

我真的在问你是否认为OO语言中的SQL是一种回归,如果没有,那么可以做些什么来使它变得更好.

ska*_*man 4

Java 中已经有一个嵌入式 SQL 的标准,称为SQLJ

话虽如此,我从未见过它在野外使用过,而且我不知道使用现代工具它是否真的是一个选择。当该标准出现时,甲骨文曾大力推动这一目标,但我认为它半途而废了。

  • 我认为这只是大多数程序员讨厌 SQL。当我们的(Perl)商店对所有数据库事务的 DBIx::Class 进行标准化时,带头采用它的人之一直接说:“我讨厌 SQL”。对于生产代码,我仍然有点同意这种心态,主要是因为 SQL 的所有各种方言都非常不兼容。但多年来,我已经开始熟悉普通的 SQL,并且在我的个人代码中更多地使用了它。 (2认同)