2010-12-09 4 views
1

J'essaie de trouver toute la clé unique de toute la table. Et ce serait indépendant du fournisseur. S'il vous plaît aider merci d'avance.Code Java pour trouver la clé unique de toute la table de la base de données

+0

que voulez-vous dire? Vous souhaitez interroger le schéma d'une table donnée pour ses contraintes uniques? – Thilo

+0

Supposons que j'essaie de trouver toute la clé unique d'une table de Java. Donc, si vous le pouvez, s'il vous plaît dites-moi sur l'API que je devrais utiliser. – Kunal

Répondre

0

Comme Kunal dit que vous devez utiliser le schéma et le contrôle du champ de table est nécessaire essayer de vérifier la classe de schéma

5

Vous pouvez utiliser JDBC MetaData pour obtenir des informations sur de telles choses.

Voici un exemple d'extrait que vous pouvez utiliser.

Si le pilote Oracle JDBC est utilisé pour le test, il est indépendant du fournisseur. Vous pouvez utiliser le code avec d'autres fournisseurs de bases de données.

import java.sql.Connection; 
import java.sql.DatabaseMetaData; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

public class Test { 

    public static void main(String[] args) throws Throwable { 
     Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521/service.name", "username", "password"); 
     DatabaseMetaData meta = conn.getMetaData(); 
     String schemaName = "SCHEMA_NAME"; 
     List<String> tables = listAllTableNames(meta, schemaName); 
     printPrimaryKeys(schemaName, tables.iterator(), meta); 
     printUniqueIndexes(schemaName, tables.iterator(), meta); 
    } 

    private static List<String> listAllTableNames(DatabaseMetaData meta, String schemaName) throws SQLException { 
     List<String> list = new ArrayList<String>(); 
     ResultSet rs = meta.getTables(null, schemaName, null, new String[] { "TABLE" }); 
     while(rs.next()) { 
      String tableName = rs.getString("TABLE_NAME"); 
      list.add(tableName); 
     } 
     return list; 
    } 

    private static void printPrimaryKeys(String schemaName, Iterator<String> iter, DatabaseMetaData meta) throws SQLException { 
     while(iter.hasNext()) { 
      String tableName = iter.next(); 
      ResultSet rs = meta.getPrimaryKeys(null, schemaName, tableName); 
      while(rs.next()) { 
       String pkName = rs.getString("PK_NAME"); 
       String table = rs.getString("TABLE_NAME"); 
       String schema = rs.getString("TABLE_SCHEM"); 
       String columnName = rs.getString("COLUMN_NAME"); 
       System.out.println("----------------------------------------"); 
       System.out.println("Table: " + schema + "." + table); 
       System.out.println("Key Name: " + pkName); 
       System.out.println("Column(s): " + columnName); 
      } 
     }  
    } 

    private static void printUniqueIndexes(String schemaName, Iterator<String> iter, DatabaseMetaData meta) throws SQLException { 
     while(iter.hasNext()) { 
      String tableName = iter.next(); 
      boolean listUniqueIndex = true; 
      ResultSet rs = meta.getIndexInfo(null, schemaName, tableName, listUniqueIndex, true); 
      while(rs.next()) { 
       String indexName = rs.getString("INDEX_NAME"); 
       String table = rs.getString("TABLE_NAME"); 
       String schema = rs.getString("TABLE_SCHEM"); 
       String columnName = rs.getString("COLUMN_NAME"); 
       if(indexName == null) { 
        continue; 
       } 
       System.out.println("****************************************"); 
       System.out.println("Table: " + schema + "." + table); 
       System.out.println("Index Name: " + indexName); 
       System.out.println("Column Name: " + columnName); 
      } 
     } 
    } 
} 
0

Vérifiez également DbTamer sur sourceforge, avec le code source inclus. http://sourceforge.net/projects/dbtamer/ Il est conçu pour désosser les bases de données afin de faciliter le transport entre différents SGBDR, mais le cœur est le code pour itérer les tables et extraire les métadonnées de table dans un modèle objet réutilisable.

Questions connexes