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
HSQLDB는 큰 따옴표로 묶을 때 "그룹"대소 문자를 보존합니다. INSERT 문은이 경우 수행하지 않는 "Group"열 이름을 큰 따옴표로 묶어야합니다. Groovy가 올바른 양식을 사용하도록하는 방법을 확인하십시오. – fredt
Groovy가 HSQL에 위임하고 있으므로 양식을 변경하려면 열 이름의 대소 문자를 구분할 수있는 HSQLDB의 설정을 찾아야합니다. 누구든지 그 일을 어떻게 알아? – pbuchheit
fredt의 올바른 아이디어가 나왔습니다. 문제는 그런 경우가 아니 었습니다. 따옴표가 없다는 것이 었습니다. 이중 따옴표로 맵에 "Group"키를 래핑하는 코드를 추가하면 문제가 사라집니다. 답변을 fredt로 게시하면 솔루션으로 표시됩니다. 감사! – pbuchheit