JDBCSQL:详细规范在哪里?
每个人都喜欢提到JDBC是如何抽象出SQL之间的特定于供应商的差异,从而呈现出一种单一的SQL风格,这种风格可以对抗大量SQL 但是,没有一本关于JDBC的书或参考文献提到(详细的)规范,甚至没有提到JDBC(特定版本)支持的SQL的用户空间覆盖率,比如JDBC4.1 因此,最终发生的事情(至少对我来说)是,如果我在使用MySQL,我必须参考MySQL参考手册,然后尝试防止自己意外使用MySQL特定的功能。对于编写可移植SQL(至少在我使用的JDBC驱动程序版本支持的级别上),我更愿意直接引用JDBC规范或SQL规范,而不是引用MySQL、PostgresQL等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标准本身(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文档:
CALL
语句;大多数供应商使用不同的方式指定自动增量列或序列生成器;等等等等等等
请不要使用W3SQL指南,它们严重过时、错误,无法区分供应商扩展和标准,通常应避免使用。我之所以提到它们,是因为w3schools往往在搜索排名中名列前茅——早在它们曾经非常有用的那一天。没有“JDBC SQL”,只有ISO SQL及其供应商实现。JDBC定义了与SQL数据库对话的接口,它与查询语言本身是不同的一层
JDBC自身的参考是JSR文档: