2016-07-03 7 views
2

나는 프로젝트를 빌드 받는다는 사용하고 SQL 쿼리에 allias를 사용하는 경우에 ResultSetMetaData에서 열을 발견하고 오류 메시지가 없어 수 : 나는 DbUnit을에 다이빙을 시도HSQLDB &하고 DBUnit는

o.d.database.DatabaseTableMetaData - Cannot find column from ResultSetMetaData    
info via DatabaseMetaData. Returning null. 
java.lang.IllegalStateException: Did not find column 'T2_PRF_VALUE' for 
<schema.table> 'PUBLIC.CDD_PRF_TABLE4' in catalog 'PUBLIC' because names do 
not exactly match 

와 HSQLDB 드라이버 이 경고를 넘어서는 어떠한 방법도 찾지 못했습니다.

내 설정입니다 (사용 받는다는) :

의 pom.xml

<dependency> 
     <groupId>org.dbunit</groupId> 
     <artifactId>dbunit</artifactId> 
     <version>2.5.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>2.3.3</version> 
     <scope>test</scope> 
    </dependency> 

hsqldb.script

SET SCHEMA PUBLIC 
ALTER USER SA SET INITIAL SCHEMA PUBLIC 
ALTER USER SA SET LOCAL TRUE 
GRANT DBA TO SA 
CREATE SCHEMA PUBLIC AUTHORIZATION DBA 
CREATE MEMORY TABLE PUBLIC.CDD_APP_TABLE1 (id INTEGER, value VARCHAR(20)); 
CREATE MEMORY TABLE PUBLIC.CDD_APP_TABLE2 (id INTEGER, value VARCHAR(20)); 
CREATE MEMORY TABLE PUBLIC.CDD_APP_TABLE3 (id INTEGER, value TIMESTAMP); 
CREATE MEMORY TABLE PUBLIC.CDD_APP_TABLE4 (id INTEGER, value TIMESTAMP); 
CREATE MEMORY TABLE PUBLIC.CDD_PRF_TABLE1 (id INTEGER, value VARCHAR(20)); 
CREATE MEMORY TABLE PUBLIC.CDD_PRF_TABLE2 (id INTEGER, value VARCHAR(20)); 
CREATE MEMORY TABLE PUBLIC.CDD_PRF_TABLE3 (id INTEGER, value TIMESTAMP); 
CREATE MEMORY TABLE PUBLIC.CDD_PRF_TABLE4 (id INTEGER, value TIMESTAMP); 

query.sql

이 경고를 해결하는 방법을 아는 사람을위한 6,
SELECT T1.VALUE as T1_PRF_VALUE, 
    T2.VALUE as T2_PRF_VALUE 
FROM CDD_PRF_TABLE3 AS T1 inner join CDD_PRF_TABLE4 AS T2 
ON T1.ID= T2.ID 

Main.java

final public static String URL = "jdbc:hsqldb:res:hsqldb/hsqldb"; 
final public static String DRIVER = "org.hsqldb.jdbcDriver"; 
final public static String USERNAME = "sa"; 
final public static String PASSWORD = ""; 
final public static String SCHEMA_NAME = "PUBLIC"; 

public static JdbcDatabaseTester createHsqldbConnection() throws ClassNotFoundException { 
    return new JdbcDatabaseTester(DRIVER, URL, USERNAME, PASSWORD, SCHEMA_NAME); 
} 

감사합니다. 은 BTW 나는이 문제에 대한 많은 질문을보고했지만

+0

이미있는 질문에 대한 링크를 추가 고려, 그것은 다른 사람들이 당신을 도울 수 있습니다. –

+0

dbuit는 열 레이블을 읽은 다음이 임시 레이블을 사용하여 데이터베이스 메타 데이터의 실제 열 이름에 액세스하려고 시도합니다. – fredt

+0

네 말이 맞다! 그는 열 레이블 대신 열 이름을 사용하고 있습니다. 이 버그에 대한 해결 방법을 찾지 못했습니다. –

답변

0

다른 JDBC 드라이버가 ResultSetMetaData.getColumnName에서 기본 열 이름이나 열 별칭을 반환 좋은 대답 (INT)

HSQLDB가 기본이를 반환 호출을 발견하지 않았다 getColumnName (int) 호출의 열 이름입니다. 연결 URL에 연결 속성 인 ;get_column_name=false이 추가 된 열 별칭 (있는 경우)을 반환하도록 HSQLDB를 가져올 수 있습니다. 가이드를 참조하십시오

http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#dpc_connection_props