JDBCSQL:详细规范在哪里?

JDBCSQL:详细规范在哪里?,sql,postgresql,jdbc,portability,Sql,Postgresql,Jdbc,Portability,每个人都喜欢提到JDBC是如何抽象出SQL之间的特定于供应商的差异,从而呈现出一种单一的SQL风格,这种风格可以对抗大量SQL 但是,没有一本关于JDBC的书或参考文献提到(详细的)规范,甚至没有提到JDBC(特定版本)支持的SQL的用户空间覆盖率,比如JDBC4.1 因此,最终发生的事情(至少对我来说)是,如果我在使用MySQL,我必须参考MySQL参考手册,然后尝试防止自己意外使用MySQL特定的功能。对于编写可移植SQL(至少在我使用的JDBC驱动程序版本支持的级别上),我更愿意直接引用J

每个人都喜欢提到JDBC是如何抽象出SQL之间的特定于供应商的差异,从而呈现出一种单一的SQL风格,这种风格可以对抗大量SQL

但是,没有一本关于JDBC的书或参考文献提到(详细的)规范,甚至没有提到JDBC(特定版本)支持的SQL的用户空间覆盖率,比如JDBC4.1

因此,最终发生的事情(至少对我来说)是,如果我在使用MySQL,我必须参考MySQL参考手册,然后尝试防止自己意外使用MySQL特定的功能。对于编写可移植SQL(至少在我使用的JDBC驱动程序版本支持的级别上),我更愿意直接引用JDBC规范或SQL规范,而不是引用MySQL、PostgresQL等


作为JDBC特定版本基础的SQL标准本身(2008、2003等)是否可以免费获得?或者,我必须拿出$$才能获得副本吗?

您可以从下载JDBC 4.1规范,但这只涉及JDBC本身,而不涉及SQL。规范更多的是对接口的描述;它确实希望数据库支持某种级别的SQL标准,但如果涉及到查询的需求,则不要期望找到比SQL标准引用更多的信息

无论如何,您通常都需要使用特定于数据库的SQL,因为即使有SQL标准,数据库供应商也不会完全实现它们。JDBC本身定义了一些转义来弥补这些差距,但据我所知,它们很少被使用。如果数据库不支持标准SQL,驱动程序通常也不会将标准SQL转换为特定于数据库的SQL


如果您想查看官方SQL标准,需要从ISO或您所在国家/地区的ISO代表处购买。也就是说,通过一些搜索,您可以免费找到并下载规范的草案版本。但是我不确定这有多大帮助,因为SQL标准文档不是作为参考手册,而是作为一个正式的描述,并且非常深入地讨论了只与实现者相关的细节。

您可以从下载JDBC 4.1规范,但这只涉及JDBC本身,而不是SQL。规范更多的是对接口的描述;它确实希望数据库支持某种级别的SQL标准,但如果涉及到查询的需求,则不要期望找到比SQL标准引用更多的信息

无论如何,您通常都需要使用特定于数据库的SQL,因为即使有SQL标准,数据库供应商也不会完全实现它们。JDBC本身定义了一些转义来弥补这些差距,但据我所知,它们很少被使用。如果数据库不支持标准SQL,驱动程序通常也不会将标准SQL转换为特定于数据库的SQL

如果您想查看官方SQL标准,需要从ISO或您所在国家/地区的ISO代表处购买。也就是说,通过一些搜索,您可以免费找到并下载规范的草案版本。不过我不确定这有多大帮助,因为SQL标准文档不是作为参考手册,而是作为一个正式的描述,并且非常深入地讨论了只与实现者相关的细节。

没有“JDBC SQL”,只有ISO SQL和供应商的实现。JDBC定义了与SQL数据库对话的接口,它与查询语言本身是不同的一层

JDBC自身的参考是JSR文档:

不幸的是,官方的SQL标准很昂贵,必须从ISO购买

当您不想在其他地方开发一致性实现时,您可以找到非常适合参考的后期草案

SQL规范并不是最友好和可读的,所以在实践中,最好使用实际上是供人类阅读的供应商文档。当出现不确定性时,您可以比较两个供应商文档,也可以使用标准文档

DBs对规范的标准遵从性并不十分理想;严格按照规范编写代码并不一定意味着它能真正工作。例如,MySQL不实现窗口函数或公共表表达式,PostgreSQL不实现SQL/PSM(而是提供PL/PgSQL)或
CALL
语句;大多数供应商使用不同的方式指定自动增量列或序列生成器;等等等等等等

请不要使用W3SQL指南,它们严重过时、错误,无法区分供应商扩展和标准,通常应避免使用。我之所以提到它们,是因为w3schools往往在搜索排名中名列前茅——早在它们曾经非常有用的那一天。

没有“JDBC SQL”,只有ISO SQL及其供应商实现。JDBC定义了与SQL数据库对话的接口,它与查询语言本身是不同的一层

JDBC自身的参考是JSR文档:

不幸的是,官方的SQL标准很昂贵,必须从ISO购买

当您不想在其他地方开发一致性实现时,您可以找到非常适合参考的后期草案

SQL规范并不是最友好和可读的,所以在实践中,最好使用实际上是供人类阅读的供应商文档。当出现不确定性时,您可以比较两个供应商文档,也可以使用标准文档

DBs对规范的标准遵从性并不十分理想;严格按照规范编写代码并不一定意味着它能真正工作。例如,MySQL没有实现