2015-01-29 8 views
5

Ho una serie di tabelle [A, B, C, D] in MySQL Databasenell'ordinare tabella delle dipendenze in JDBC

La dipendenza è la seguente B-> C> A e D> A cioè, A ha un PrimaryKey, C ha una chiave esterna che punta la chiave primaria di A e B ha una chiave esterna che punta la chiave primaria di C e allo stesso modo D ha una chiave esterna che punta la chiave primaria di A.

Ho bisogno di ottenere l'elenco di dipendenza ordinato tabelle in modo che non ottengo problemi durante l'inserimento

Come faccio ad avere l'elenco tabella come [A, C, B, D] tramite JDBC?

+0

Buona domanda, +1. Alcune persone faranno downvoteing di qualsiasi cosa. Il mondo ha bisogno di uno strumento per questo. Non dovrebbe essere difficile, solo un ordinamento topologico sulle clausole FOREIGN KEY negli [SHOW CREATE TABLE output] (http://stackoverflow.com/a/18050973/207421). – EJP

+1

Non ci sono API per questo in JDBC. Devi scriverlo da solo. Alcuni client SQL possono farlo per te. –

+3

@EJP Penso che sarebbe meglio usare i metadati del database JDBC (ad esempio 'DatabaseMetaData.getImportedKeys()' o 'DatabaseMetaData.getExportedKeys()' per fare questo, altrimenti si associa la soluzione a MySQL invece di avere una soluzione generica che 1) funzionerebbe anche su altri sistemi e 2) richiede meno analisi. –

risposta

0

In realtà ho appena capito questo per un recente progetto scolastico. Ci sono alcuni modi per farlo, come usare ResultSetMetaData e impostare un ciclo con un listener di eccezioni; comunque il modo più veloce è quello che ho qui sotto. leggi è un Dichiarazione oggetto e risultati è un ResultSet oggetto. Usando questo dovresti essere in grado di scrivere un ciclo che cicla attraverso tutti i nomi. Penso che questo metodo sia migliore perché restituisce un ResultSet solo dei nomi delle tabelle. Se aggiungi il modifer FULL, apparirà una seconda colonna che descrive il tipo di tabelle ciascuna come la tabella di base. Spero che questo ti aiuti!

read.execute("SHOW TABLES IN your_database_name;"); 
results = read.getResultSet(); 
results.first(); 
System.out.println(results.getString(1)); 

MySQL Show Statement

+0

Da qui è possibile memorizzarlo in un array o in un elenco. Se hai bisogno dell'implementazione per ottenere il numero di colonne e righe in un ResultSet fammi sapere come ho fatto anch'io. – Razelle

+0

È inoltre possibile utilizzare i vincoli per le chiavi e utilizzare il codice per interpretare tutto. http://dev.mysql.com/doc/refman/5.0/en/table-constraints-table.html – Razelle

Problemi correlati