2017-10-21 14 views
0

2 개의 데이터베이스 연결 (하나의 MySql과 Oracle (v11))이있는 DropWizard 프로젝트가 있습니다. MySql 연결 및 쿼리는 정상적으로 작동합니다. 내 Oracle 쿼리에서 데이터를 얻지 못하고 로그에 오류가 없습니다.DropWizard에서 JDBI를 사용하는 간단한 Oracle 쿼리가 결과를 실행/반환하지 않습니다.

내 DOA는 다음과 같습니다

public interface DummyDao { 

    @SqlQuery(
      "select prod_sku, initial_qty, current_qty" + 
      " from prod_detail" + 
      " where prod_sku = :skuNumber") 
    @Mapper(DummyMapper.class) 
    Dummy getSku(@Bind("skuNumber") String skuNumber); 

} 

내 매퍼는 다음과 같습니다. 매퍼에 로그 문을 추가하면 호출되지 않는다는 것을 확인할 수있었습니다. DAO를 다음 코드를 통해 내 응용 프로그램의 실행 방법에 초기화되고

public class DummyMapper implements ResultSetMapper<Dummy> { 

    public Dummy map(int index, ResultSet r, StatementContext ctx) 
      throws SQLException { 

     return new Dummy(
      r.getString("prod_sku"), 
      r.getLong("initial_qty"), 
      r.getLong("current_qty")); 

    } 

} 

는 :

내 연결 아무 문제가 없습니다 확인하기 위해
public class ProductServiceApplication extends Application<ProductServiceConfiguration> { 

    DataSource sb_ds; 
    DBI sb_dbi; 
    DummyDao dummyDao; 

    @Override 
    public void run(
      final ProductServiceConfiguration configuration, 
      final Environment environment) { 

     sb_ds = configuration.getSbliveDataSourceFactory() 
       .build(environment.metrics(), "sblive"); 
     sb_dbi = new DBI(sb_ds); 
     dummyDao = sb_dbi.onDemand(DummyDao.class); 

    } 

} 

, 나는 일시적으로 내 실행 방법에 다음 코드를 추가 예상 결과를 반환합니다.

try (Handle h = sb_dbi.open()) { 
    List<Map<String,Object>> result = 
     h.select("select initial_qty, current_qty from prod_detail where prod_sku = '10501034520008'"); 
    System.out.println("bootstrap: " + result.toString()); 
} 

동일한 매개 변수로 내 DAO의 getSku 메서드를 실행하면 null이 반환됩니다.

누군가 내가 잘못하고있는 것을 말해 줄 수 있습니까? 아니면이 문제의 원인을 파악하기 위해 취할 수있는 조치를 가르쳐 줄 수 있습니까? 디버깅을 시도했지만, JDBI 내부에 대해 충분히 알지 못해서 내가보고있는 것을 이해하지 못합니다.

답변

0

문제점을 발견했습니다. 문제는 바인드 변수와 연관된 열이 VARCHAR (20)이 아닌 CHAR (20)로 정의되고 실제 매개 변수 값의 길이가 14입니다. 명령문을 직접 실행하면 SqlDeveloper), 잘 작동합니다. 그러나 준비된 명령문과 변수를 사용할 때 문제가 발생합니다.

매개 변수를 20 자까지 채우면 문제가 해결됩니다.