문제
JDBC를 사용하여 Apache Derby DB의 스키마의 모든 테이블을 어떻게 삭제합니까?
해결책
이를 수행하는 실제 코드의 경우 확인하십시오 CleanDatabasetestSetUp.java Derby Distribution의 Derby Test Suite 섹션에서.
다른 팁
감사합니다 블로그:
1 단계:
SQL 문을 실행하지만 아래의 두 가지 발생에서 스키마 이름 '앱'을 스키마 이름으로 바꾸는 것을 잊지 마십시오.
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 제공 업체는 드롭 테이블 * (또는 이와 유사한)을 허용하지 않는다고 생각합니다.
가장 좋은 방법은 테이블을 표시 한 다음 결과 세트를 통해 루프에서 각 삭제를 거치는 것입니다.
HTH.
JDBC는 데이터베이스 불가지론적인 방식으로 작업을 해결할 수 있습니다.
- 연결을 엽니 다
- DataBasemetAdata를 잡습니다
- 데이터베이스에 모든 테이블을 나열하는 데 사용하십시오 Javadoc
- 결과 집합을 반복하고 각 테이블의 드롭 테이블을 발사하십시오.
- 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
;
간단한 솔루션은 마우스 오른쪽 버튼을 클릭 한 다음 데이터베이스가 포함 된 폴더를 삭제하고 다시 연결하는 것입니다.
Squirrel SQL을 다운로드하십시오 http://squirrel-sql.sourceforge.net/
데이터베이스에 연결하십시오.
테이블 노드를 확장하십시오.
떨어 뜨릴 테이블을 선택하십시오.
마우스 오른쪽 버튼을 클릭하고 선택 -> 스크립트 -> 테이블 스크립트 드롭.
생성 된 쿼리를 실행하십시오
선택한 테이블을 비우기 위해 레코드 삭제를 선택할 수도 있습니다.