日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中的数据库架构导航

發布時間:2023/12/3 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中的数据库架构导航 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
jOOQ的重要組成部分是數據庫架構導航模塊jooq-meta。 代碼生成器使用它來發現相關的架構對象。 我多次被問到為什么我要自己滾動而不使用其他庫,例如SchemaCrawler或SchemaSpy ,確實很遺憾我不能依賴其他穩定的第三方產品。

以下是有關數據庫架構導航的一些想法:

標準品

SQL-92標準定義了RDBMS如何實現包含其字典表的INFORMATION_SCHEMA。 實際上,某些RDBMS確實實現了標準規范的某些部分。 這些RDBMS附帶了該標準的某些實現。


接近標準

  • HSQLDB:非常接近真實標準
  • Postgres:接近標準,但有一些調整(也有專有的字典表)
  • SQL Server:接近標準但不完整(也具有專有的字典表)

標準的自由解釋

  • H2(最近有一些向后不兼容的更改)
  • MySQL(僅從5.0開始,還具有專有的字典表)

其他RDBMS提供了他們自己的字典表概念。 對于像jOOQ這樣的模式導航工具來說,要掌握這些技巧非常棘手。 字典表格局可以這樣描述(我的偏見):

整齊有據的字典表

  • DB2:這些字典表在某種程度上看起來像標準的,但名稱不同。 他們感到直觀。
  • Oracle:在我看來,字典視圖的集合要比標準提議的字典視圖更好。 在整個Internet上非常易于理解和文檔完善
  • SQLite:沒有字典表,但是SQLite存儲過程使用起來非常簡單。 畢竟這是一個簡單的數據庫

難以理解,沒有詳細記錄的字典表

  • Derby:創建了企業集團的概念,而不是使用通常的數據庫語言,例如關系,鍵等。
  • MySQL:舊的mysql模式非常痛苦。 幸運的是,MySQL 5.0不再適用
  • Ingres:好吧……Ingres是一個古老的數據庫 。 可用性并不是70年代的主要內容之一。
  • Sybase SQL Anywhere:許多必須以復雜關系連接的對象。 文件稀缺
  • Sybase ASE:比SQL Anywhere還要困難。 某些數據只能通過“技巧”獲得

JDBC抽象

字典表的多樣性似乎要求標準抽象。 盡管實際上可以在大多數RDBMS中實現SQL-92標準,但JDBC抽象甚至更好。 JDBC知道DatabaseMetaData對象,并允許輕松導航數據庫模式。 不幸的是,此API 有時會拋出SQLFeatureNotSupportedException 。 關于哪個JDBC驅動程序實現多少API以及何時需要解決方法,沒有通用的規則。 對于jOOQ代碼生成,這些事實使該API毫無用處。

其他工具

如前所述,開源世界中還有其他一些工具。 在jOOQ中使用這些工具有一些缺點:

  • 據我所知,這兩個工具均已獲得LGPL許可,這與jOOQ的Apache 2許可證不太兼容。
  • 兩種工具都很好地導航了實體關系,但是似乎缺乏對許多非標準構造的支持,例如UDT,高級存儲過程用法(例如,返回游標,UDT等),ARRAY
  • SchemaCrawler僅支持8個RDBMS,jOOQ現在有12個
  • 兩種工具都不活躍。 看這里和這里

有關更多信息,請訪問其網站:

  • 模式爬蟲
  • 模式間諜

Jooq-meta

由于上述原因,jOOQ附帶了自己的數據庫模式導航:jooq-meta。 該模塊可以單獨用作JDBC的DatabaseMetaData,SchemaCrawler或SchemaSpy的替代。 jooq-meta使用jOOQ設計的查詢來導航數據庫元數據,因此它也是集成測試套件的一部分。 例如,查看如何使用jooq-meta導航Ingres外鍵關系:

Result<Record> result = create().select(IirefConstraints.REF_CONSTRAINT_NAME.trim(),IirefConstraints.UNIQUE_CONSTRAINT_NAME.trim(),IirefConstraints.REF_TABLE_NAME.trim(),IiindexColumns.COLUMN_NAME.trim()).from(IICONSTRAINTS).join(IIREF_CONSTRAINTS).on(Iiconstraints.CONSTRAINT_NAME.equal(IirefConstraints.REF_CONSTRAINT_NAME)).and(Iiconstraints.SCHEMA_NAME.equal(IirefConstraints.REF_SCHEMA_NAME)).join(IICONSTRAINT_INDEXES).on(Iiconstraints.CONSTRAINT_NAME.equal(IiconstraintIndexes.CONSTRAINT_NAME)).and(Iiconstraints.SCHEMA_NAME.equal(IiconstraintIndexes.SCHEMA_NAME)).join(IIINDEXES).on(IiconstraintIndexes.INDEX_NAME.equal(Iiindexes.INDEX_NAME)).and(IiconstraintIndexes.SCHEMA_NAME.equal(Iiindexes.INDEX_OWNER)).join(IIINDEX_COLUMNS).on(Iiindexes.INDEX_NAME.equal(IiindexColumns.INDEX_NAME)).and(Iiindexes.INDEX_OWNER.equal(IiindexColumns.INDEX_OWNER)).where(Iiconstraints.SCHEMA_NAME.equal(getSchemaName())).and(Iiconstraints.CONSTRAINT_TYPE.equal("R")).orderBy(IirefConstraints.REF_TABLE_NAME.asc(),IirefConstraints.REF_CONSTRAINT_NAME.asc(),IiindexColumns.KEY_SEQUENCE.asc()).fetch();

結論

再一次可以說,RDBMS的世界是非常不同的。 Java中的數據庫抽象僅在某種程度上在諸如JDBC,Hibernate / JPA之類的技術以及諸如SchemaCrawler,SchemaSpy和jooq-meta之類的第三方庫中建立。

參考: JCG合作伙伴在“ Java,SQL和jOOQ”博客上提供的 Java數據庫模式導航 。

相關文章 :
  • Java Persistence API:快速入門
  • GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
  • JBoss 4.2.x Spring 3 JPA Hibernate教程
  • Hibernate映射集合性能問題

翻譯自: https://www.javacodegeeks.com/2011/09/database-schema-navigation-in-java.html

總結

以上是生活随笔為你收集整理的Java中的数据库架构导航的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。