DBUnit을 이용하여 백업된 데이터를 복원할려는 중 다음과 같은 예외가 발생했다.
org.dbunit.database.AmbiguousTableNameException
DB가 오라클일 경우에는 리사이클기능을 의심하라고 합니다. 오라클은 테이블을 삭제 후 생성했을 경우, 삭제 테이블이 리사이클 영역에 남게 됩니다. DB유닛은 리사이클영역의 테이블까지 인식하여 같은 테이블이 두개 있는 것으로 인지한다고 합니다. 해결책은 sqlplus에 접속하여 아래와 같은 명령을 내려주어 리사이클영역을 청소해 주면 됩니다.
PURGE RECYCLEBIN;
원문사이트번역
http://d.hatena.ne.jp/dkfj/20080315/1205559554
2009. 9. 8.
2009. 9. 2.
DBUnit 사용
JUnit을 기반으로 만들었기 때문에 JUnit과 사용법이 동일하다.
부가적으로 DB접근 기능 및 백업 추가 관련 API가 추가 되어있다.
TestCase를 상속한 테스트 클래스를 만들고 초기화(setUp) 및 테스트 종료(tearDown)시 호출되는 메소드에 DB백업 및 복원 기능을 추가해 넣으면 된다.
백업 및 복원은 일반적으로 테스트 케이스에 의해 값이 변경(Update)되거나 삭제(Delete)되는 경우에 실시한다. 선택(Select)의 경우에는 먼저 setUp메소드에서 테스트 데이터를 입력하고 테스트를 실시한 후 tearDown에서 입력한 데이터를 삭제한다.
간단한 예제를 들면 다음과 같다.
먼저 setUp을 보자
위의 코드 중 테스트를 위한 입력 데이터의 예는 다음과 같다.
TearDown의 경우는
dbunit api 내에는 ant를 이용한 테이블 백업 유틸리티가 제공되고 있는데 이를 사용하는 예는 아래와 같다.
위 코드를 ant를 이용하여 실행하면
taskdef A class needed by class org.dbunit.ant.DbUnitTask cannot be found: org.slf4j.LoggerFactory
와 같은 에러가 발생할 수도 있다.
아래의 유알엘을 참고하여 해결한다.
http://j2eeframeworks.blogspot.com/2008/10/problems-in-integrating-ant-with-dbunit.html
간단하게 설명하면 slf4j-simple-1.5.3.jar와 slf4j-api-1.5.3.jar라는 두 라이브러리를 클래스 패스 경로에 포함하면 해결된다. http://www.slf4j.org/download.html 에서 해당 파일을 다운받을 수 있다. ant의 클래스 패스경로에 두 파일을 추가하기 위해 Window--> Preferences --> Ant --> Runtime --> 클래스패스탭 으로 이동하여 위 두 자 파일을 추가한다.
slf4j-simple-1.5.3.jar and slf4j-api-1.5.3.jar
db의 내용을 엑셀파일로 익스포트하는 법
참고 URL
http://j2eeframeworks.blogspot.com/2008/10/problems-in-integrating-ant-with-dbunit.html
http://www.techscore.com/tech/Others/DBUnit/index.html
http://www.thinkit.co.jp/article/32/3/3.html
http://muimi.com/j/test/dbunit/
부가적으로 DB접근 기능 및 백업 추가 관련 API가 추가 되어있다.
TestCase를 상속한 테스트 클래스를 만들고 초기화(setUp) 및 테스트 종료(tearDown)시 호출되는 메소드에 DB백업 및 복원 기능을 추가해 넣으면 된다.
백업 및 복원은 일반적으로 테스트 케이스에 의해 값이 변경(Update)되거나 삭제(Delete)되는 경우에 실시한다. 선택(Select)의 경우에는 먼저 setUp메소드에서 테스트 데이터를 입력하고 테스트를 실시한 후 tearDown에서 입력한 데이터를 삭제한다.
간단한 예제를 들면 다음과 같다.
먼저 setUp을 보자
protected void setUp() {
IDatabaseConnection connection =null;
try{
super.setUp();
Connection conn=getConnection();
connection
=new DatabaseConnection(conn);
//현재상태 백업
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable("ACCEPT_ORDER");
file=File.createTempFile("accept",".xml");
FlatXmlDataSet.write(partialDataSet,
new FileOutputStream(file));
//테스트데이터 입력
IDataSet dataSet
= new FlatXmlDataSet( new FileInputStream("accept_order_test_data.xml"));
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(connection!=null) connection.close();
}catch(SQLException e){}
}
}
위의 코드 중 테스트를 위한 입력 데이터의 예는 다음과 같다.
c_num="1000"
p_num="501"
dc_rate="5"
option_price="30"
employee="101"
accept_date="2004-01-01" />
TearDown의 경우는
protected void tearDown() throws Exception{
IDatabaseConnection connection =null;
try{
super.tearDown();
Connection conn=getConnection();
connection
=new DatabaseConnection(conn);
IDataSet dataSet
= new FlatXmlDataSet(file);
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(connection!=null) connection.close();
}catch(SQLException e){}
}
}
dbunit api 내에는 ant를 이용한 테이블 백업 유틸리티가 제공되고 있는데 이를 사용하는 예는 아래와 같다.
classpath="${basedir}/WebContent/WEB-INF/lib/dbunit-2.4.5.jar" >
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.0.5:1521:xxx"
userid="user"
password="pass"
schema="schema">
위 코드를 ant를 이용하여 실행하면
taskdef A class needed by class org.dbunit.ant.DbUnitTask cannot be found: org.slf4j.LoggerFactory
와 같은 에러가 발생할 수도 있다.
아래의 유알엘을 참고하여 해결한다.
http://j2eeframeworks.blogspot.com/2008/10/problems-in-integrating-ant-with-dbunit.html
간단하게 설명하면 slf4j-simple-1.5.3.jar와 slf4j-api-1.5.3.jar라는 두 라이브러리를 클래스 패스 경로에 포함하면 해결된다. http://www.slf4j.org/download.html 에서 해당 파일을 다운받을 수 있다. ant의 클래스 패스경로에 두 파일을 추가하기 위해 Window--> Preferences --> Ant --> Runtime --> 클래스패스탭 으로 이동하여 위 두 자 파일을 추가한다.
slf4j-simple-1.5.3.jar and slf4j-api-1.5.3.jar
db의 내용을 엑셀파일로 익스포트하는 법
public class XLSExporter {
public static void main(String[] args) throws Exception {
DatabaseConnection con = new DatabaseConnection(ConnectionManager
.getConnection());
IDataSet dataset = con.createDataSet();
XlsDataSet.write(dataset, new FileOutputStream("export.xls"));
}
}
참고 URL
http://j2eeframeworks.blogspot.com/2008/10/problems-in-integrating-ant-with-dbunit.html
http://www.techscore.com/tech/Others/DBUnit/index.html
http://www.thinkit.co.jp/article/32/3/3.html
http://muimi.com/j/test/dbunit/
피드 구독하기:
글 (Atom)