DatabaseMetaData etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
DatabaseMetaData etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

29 Ağustos 2023 Salı

JDBC DatabaseMetaData.getTables metodu

Giriş
Not : Bu metod çok iyi çalışmıyor. Farklı veri tabanları için farklı yöntemler kullanmak gerekir. Bir makale burada
İmzası şöyle
public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException
types için açıklama şöyle
Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
Döndürülen sütunlar şöyle
TABLE_CAT : Catalog of the table.
TABLE_SCHEM : Catalog of the schema.
TABLE_NAME : Name of the table.
TABLE_TYPE : Type of the table. (table, view, system table, global table, alias, synonym etc..)
REMARKS : Comments on the column.
TYPE_SCHEM : Schema of the table.
TYPE_NAME : Name of the type.
SELF_REFERENCING_COL_NAME : Name of the designated column of the table.
REF_GENERATION : Either SYSTEM or, USER or, DERIVED.
Örnek - Kendi Schemam'daki Tüm Tablolar
Şöyle yaparız. Burada catalog ve schema ismi connection nesnesine göre veriliyor. Tablo ismi belirtilmiyor ama Types olarak TABLE belirtilmiş
try(ResultSet rs = conn.getMetaData().getTables(conn.getCatalog(), conn.getSchema(), null, new String[] {"TABLE"})) { ... }
Örnek - Veri tabanındaki Tüm Tablolar Yani Database Discovery
Şöyle yaparız. Burada catalog ve schema ve tablaneNamePattern parametreleri belirtilmediği için tüm schemalarındaki tüm tabloları buluyor. Tabloları buluyor çünkü Types olarak TABLE belirtilmiş
try(ResultSet rs = conn.getMetaData().getTables(null,null,null,new String[] {"TABLE"})) { while (rs.next()) { System.out.println(rs.getString("TABLE_SCHEM") + "." + rs.getString("TABLE_NAME")); } } // Output app96.t1 app96.t2 public.administration$account public.appmodule$uploadedfile public.audittrail$audittrailsuperclass

1 Mart 2019 Cuma

JDBC DatabaseMetaData Arayüzü

Giriş
Şu satırı dahil ederiz
import java.sql.DatabaseMetaData;
Yaşam Döngüsü
DatabaseMetaData nesnesi kendisini yaratan Connection nesnesi hayatta olduğu müddetçe kullanılabilir.

constructor
Şöyle yaparız.
Connection con = ...;
DatabaseMetaData md = con.getMetaData();
getCatalogs metodu
Şöyle yaparız.
ResultSet rs =  dm.getCatalogs();
while (rs.next()){
  System.out.println("\tcatalog: "+ rs.getString(1));
} 
rs.close();
SQL Server şunu döner
catalog: master
catalog: msdb
catalog: pubs
catalog: tempdb
getColumns metodu
Örnek
Şöyle yaparız
void readColumns(String tableName, DatabaseMetaData databaseMetaData) { try (ResultSet resultSet = databaseMetaData.getColumns(null, null, tableName, null)) { while (resultSet.next()) { String columnTypeName = resultSet.getString("TYPE_NAME"); String columnName = resultSet.getString("COLUMN_NAME"); String defaultValue = resultSet.getString("COLUMN_DEF"); ... } } catch (SQLException e) { ... } }
getDatabaseProductName metodu
Şöyle yaparız.
databaseMetaData.getDatabaseProductName();
Döndürülen String'den veri tabanı tipini belirlemek için Hibernate şöyle yapıyor. Bazı String'ler şöyle
H2
MySQL
PostgreSQL
Microsoft SQL Server
Oracle
getDatabaseProductVersion metodu
Şöyle yaparız.
databaseMetaData.getDatabaseProductVersion();
SQL Server şunu döner
Microsoft SQL Server  2000 - 8.00.384 (Intel X86)
May 23 2001 00:02:52
Copyright (c) 1988-2000 Microsoft Corporation
Desktop Engine on Windows NT 5.1 (Build 2600: )
getDriverMajorVersion metodu
Şöyle yaparız
databaseMetaData.getDriverMajorVersion();
getDriverMinorVersion metodu
Şöyle yaparız
databaseMetaData.getDriverMinorVersion();
getDriverName metodu
Şöyle yaparız.
conn.getMetaData().getDriverName(); // Oracle JDBC driver döner
SQL Server şunu döner
SQLServer
getDriverVersion metodu
Şöyle yaparız
mddatabaseMetaDatagetDriverVersion();
SQL Server şunu döner
2.2.0022
getImportedKeys metodu
Şöyle yaparız.
String table = ...;
ResultSet rs = databaseMetaData.getImportedKeys(
                      con.getCatalog(),
                      "TEST", //schema
                      table   //table
                    );
getPrimaryKeys metodu
Şöyle yaparız.
String tableName = ...;
ResultSet rs = databaseMetaDatagetPrimaryKeys(null, null, tableName);
Örnek
Şöyle yaparız
DataSource dataSource = ...
try (Connection connection = dataSource.getConnection();) {
  DatabaseMetaData databaseMetaData = connection.getMetaData();
  Set<String> pkColumns = readPrimaryKeys(tableName, databaseMetaData);
   ..
}

Set<String> readPrimaryKeys(String tableName, DatabaseMetaData databaseMetaData) {
  Set<String> pkColumns = new HashSet<>();
  try (ResultSet resultSet = databaseMetaData.getPrimaryKeys(null, null, tableName)) {
    while (resultSet.next()) {
      String columnName = resultSet.getString("COLUMN_NAME");
      pkColumns.add(columnName);
    }
  } catch (SQLException e) {
    ...
  }
  return pkColumns;
}
getProcedureColumns metodu
Veritabanındaki Stored Procedure'lara erişmek için kullanılır.

getTables metodu - catalog + schemaPattern + tableNamePattern + types[]
getTables metodu yazısına taşıdım

getUrl metodu
Şöyle yaparız.
String originalURL = databaseMetaData.getURL();