Elimina tutte le tabelle nel DB Derby
Domanda
Come posso eliminare tutte le tabelle nello schema su Apache Derby DB usando JDBC?
Soluzione
Per il codice effettivo che fa questo, controlla CleanDatabaseTestSetup.java nella sezione suite di test Derby della distribuzione Derby.
Altri suggerimenti
Grazie a il blog :
Passaggio 1:
Esegui l'istruzione SQL, ma non dimenticare di sostituire il nome dello schema 'APP' con il tuo nome dello schema nelle 2 occorrenze seguenti:
SELECT
'ALTER TABLE '||S.SCHEMANAME||'.'||T.TABLENAME||' DROP CONSTRAINT '||C.CONSTRAINTNAME||';'
FROM
SYS.SYSCONSTRAINTS C,
SYS.SYSSCHEMAS S,
SYS.SYSTABLES T
WHERE
C.SCHEMAID = S.SCHEMAID
AND
C.TABLEID = T.TABLEID
AND
S.SCHEMANAME = 'APP'
UNION
SELECT 'DROP TABLE ' || schemaname ||'.' || tablename || ';'
FROM SYS.SYSTABLES
INNER JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID = SYS.SYSSCHEMAS.SCHEMAID
where schemaname='APP';
Passaggio 2:
Il risultato dell'esecuzione sopra è un insieme di istruzioni SQL, copiarle nell'editor SQL, eseguirle, quindi i vincoli e le tabelle vengono eliminati.
Esegui un piccolo metodo in Java in cui esegui un
DROP TABLE [tablename]
tablename
viene passato per parametro.
E un altro metodo in cui si esegue il ciclo su un set di record formato dalla query
SELECT tablename FROM SYSTABLES
chiamando il primo metodo.
Penso che la maggior parte dei provider di database non permetta DROP TABLE * (o simile).
Penso che il modo migliore sarebbe quello di MOSTRARE TABELLE e poi passare attraverso ogni eliminazione in un ciclo tramite un set di risultati.
HTH.
JDBC ti consente di risolvere il tuo compito in modo agnostico nel database:
- Apri la connessione
- Prendi il DatabaseMetaData
- Usalo per elencare tutte le tabelle nel tuo database JavaDoc
- Scorrere sul gruppo di risultati e attivare la DROP TABLE per ogni tabella
- è necessario generare lo schema e il nome della tabella dal catalogo di sistema del Derby DB.
- Ordina tutte le tabelle in base alla relazione.
- Genera istruzione java per eliminare tutte le tabelle
- Usa il metodo autoCommit () e imposta questo metodo su false. per operazioni di commit o rollback manuali in caso di errori.
- Esegui il tuo processo Java. Buona fortuna.
Una soluzione più semplice è utilizzare JDBC per eseguire "drop database foo" quindi "crea database foo". Tuttavia, ciò causerà l'eliminazione di tutti gli oggetti nel DB (ovvero non solo le tabelle).
Se stai lavorando dal prompt dei comandi piuttosto che tramite JDBC, questo dovrebbe iniziare.
SELECT 'DROP TABLE ' || schemaname ||'.' || tablename || ';'
FROM SYS.SYSTABLES
INNER JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID = SYS.SYSSCHEMAS.SCHEMAID
;
Una soluzione semplice è fare clic con il tasto destro - > disconnetti quindi elimina la cartella contenente il tuo database e riconnettilo.
Scarica Squirrel SQL da http://squirrel-sql.sourceforge.net/
Connetti al database.
Espandi il nodo TABELLA.
Seleziona le tabelle che vuoi eliminare.
Fai clic destro e seleziona - > Script - > Elimina gli script delle tabelle
Esegui le query generate
Puoi anche selezionare Elimina record per svuotare le tabelle selezionate.