質問
JDBCを使用してApache Derby DBのスキーマ内のすべてのテーブルを削除するにはどうすればよいですか
解決
これを行う実際のコードについては、 CleanDatabaseTestSetup.java 。
他のヒント
ブログ:
ステップ1:
SQLステートメントを実行しますが、以下の2つのオカレンスでスキーマ名「APP」を自分のスキーマ名に置き換えることを忘れないでください:
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';
ステップ2:
上記の実行の結果は一連のSQLステートメントであり、それらをSQLエディターにコピーして実行し、制約とテーブルが削除されます。
Javaで実行する小さなメソッドを実行します
DROP TABLE [tablename]
tablename
はパラメーターによって渡されます。
そして、クエリによって形成されたレコードセットをループする別の方法
SELECT tablename FROM SYSTABLES
最初のメソッドを呼び出す。
ほとんどのdbプロバイダーはDROP TABLE *(または同様の)を許可していません。
最善の方法は、テーブルを表示してから、結果セットを介してループで各削除を実行することだと思います。
HTH。
JDBCを使用すると、データベースに依存しない方法でタスクを解決できます。
- 接続を開く
- DatabaseMetaDataを取得する
- これを使用して、データベース内のすべてのテーブルを一覧表示します JavaDoc
- 結果セットを反復処理し、各テーブルのDROP TABLEを起動します
- Derby DBシステムカタログからスキーマとテーブル名を生成する必要があります。
- すべてのテーブルをリレーション順に並べます。
- すべてのテーブルを削除するためのjavaステートメントを生成する
- autoCommit()メソッドを使用し、このメソッドをfalseに設定します。エラーが発生した場合のトランザクションの手動コミットまたはロールバック用。
- Javaプロセスを実行します。 幸運。
より簡単な解決策は、JDBCを使用して" drop database foo"を実行することです。次に、「データベースfooを作成」します。ただし、これにより、DB内のすべてのオブジェクトが削除されます(つまり、テーブルだけではありません)。
JDBCではなくコマンドプロンプトから作業している場合は、これで開始できます。
SELECT 'DROP TABLE ' || schemaname ||'.' || tablename || ';'
FROM SYS.SYSTABLES
INNER JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID = SYS.SYSSCHEMAS.SCHEMAID
;
簡単な解決策は、右クリックすることです->データベースを含むフォルダーを切断してから削除し、再接続します。
http://squirrel-sql.sourceforge.net/
データベースに接続します。
TABLEノードを展開します。
ドロップするテーブルを選択します。
右クリックして選択->スクリプト->テーブルスクリプトの削除
生成されたクエリを実行します
レコードの削除を選択して、選択したテーブルを空にすることもできます。