2014-02-18 3 views
0

groovy sql 쿼리를 테스트하려고 할 때 내 재치가 있습니다. 아이디어는 groovy를 사용하여 SQL 쿼리를 실행하여 기존 MS SQL 데이터베이스에서 일부 데이터를 가져와 내 애플리케이션에서 사용할 수있는 형식으로 반환합니다. 그루비 스크립트를 작성하는 것은 간단했지만 테스트는 또 다른 문제입니다. 현재 테스트 용 메모리 내장 DB를 만들 때 극 초음속을 사용하고 있습니다. 내 테스트가 실행되면 테이블을 만들어 xml 파일의 일부 테스트 데이터로 채 웁니다. 테이블 생성은 정상적으로 작동하지만 "사용자에게 권한이 없거나 개체를 찾을 수 없음 : GROUP"이라는 데이터 삽입이 실패합니다.HSQL의 대소 문자 구분 컬럼 이름

문제는 hsql이 모든 열 이름을 대문자로 변환하는 것 같습니다. 따라서 실제 열 이름이 "Group"이더라도 INSERT 문에 대해 "GROUP"으로 변환됩니다. GROUP은 group 키워드와 충돌하므로 쿼리가 실패합니다.

레거시 DB의 열 이름을 제어 할 수 없기 때문에 몇 가지 해결 방법이 필요합니다. 열 이름 변환을 방지하기 위해 hsql을 구성 할 수있는 방법이 있습니까?

업데이트 :

먼저 내가 테스트 DB

Sql remoteDB; 
... 
remoteDB.execute(
       """create table INFO_GROUP(
"Group" varchar(2) not null primary key, 
VALUE varchar(3) null, 
GROUP_DATE datetime null, 
COMMENT varchar(25) null 
)"""); 

에서 테이블을 생성하는 초기화 방법이 있습니다 여기 내가 그루비에서 할 노력하고 무엇을 보여줍니다 몇 가지 예제 코드 테이블이 만들어지면 xml 파일의 일부 데이터를 구문 분석하여 내가 만든 테이블에 삽입합니다.

groovy.sql.DataSet set = remoteDB.dataSet(tableName);    
Node n = it; 
Map<String,Object> m = n.attributes() ; 
assert(set!=null); 
set.add(m); 

내가보고있는 문제는 내가 set.add (m)라고 부르는 마지막 줄입니다.

Failed to execute: insert into INFO_GROUP (Group, VALUE, GROUP_DATE, COMMENT) values (?, ?, ?, ?) because: user lacks privilege or object not found: GROUP

+0

HSQLDB는 큰 따옴표로 묶을 때 "그룹"대소 문자를 보존합니다. INSERT 문은이 경우 수행하지 않는 "Group"열 이름을 큰 따옴표로 묶어야합니다. Groovy가 올바른 양식을 사용하도록하는 방법을 확인하십시오. – fredt

+0

Groovy가 HSQL에 위임하고 있으므로 양식을 변경하려면 열 이름의 대소 문자를 구분할 수있는 HSQLDB의 설정을 찾아야합니다. 누구든지 그 일을 어떻게 알아? – pbuchheit

+0

fredt의 올바른 아이디어가 나왔습니다. 문제는 그런 경우가 아니 었습니다. 따옴표가 없다는 것이 었습니다. 이중 따옴표로 맵에 "Group"키를 래핑하는 코드를 추가하면 문제가 사라집니다. 답변을 fredt로 게시하면 솔루션으로 표시됩니다. 감사! – pbuchheit

답변

1

HSQLDB는 큰 따옴표로 묶을 때 "그룹"대소 문자를 보존합니다. INSERT 문은이 경우 수행하지 않는 "Group"열 이름을 큰 따옴표로 묶어야합니다.

create table INFO_GROUP("Group" varchar(2) not null primary key, VALUE varchar(3) null, 
    GROUP_DATE datetime null, COMMENT varchar(25) null) 

insert into INFO_GROUP ("Group", VALUE, GROUP_DATE, COMMENT) values ? , ? , ? ,? 

그것은 단어 Group 올바른 INSERT 문을 생성하기 위해 그루비의지도에 큰 따옴표 "Group"와 함께 사용할 수 있습니다 밝혀졌다.