2017-04-27 19 views
2

私はPostgresの関数を呼び出すためにSimpleJdbcCallを使用してDAO持っていると:春:SimpleJdbcCall動的パラメータ

public final class AuthDAO extends UntypedActor { 

    private final ActorRef manager; 

    private final JdbcTemplate jdbcTemplate; 

    private final SimpleJdbcCall jdbcCall; 

    public AuthDAO(ActorRef manager) { 
     this.manager = manager; 
     jdbcTemplate = DBConfig.jdbcTemplate(); 
     jdbcCall = new SimpleJdbcCall(jdbcTemplate) 
       .withSchemaName("auth") 
       .withCatalogName("public") 
       .withoutProcedureColumnMetaDataAccess(); 
    } 

    public static Props create(ActorRef manager) { 
     return Props.create(AuthDAO.class, manager); 
    } 

    @Override 
    public void onReceive(Object o) throws Throwable { 
     if (o instanceof DBMessage) { 

      DBMessage message = (DBMessage) o; 
      jdbcCall.declareParameters(new SqlParameter("login", Types.VARCHAR)); 
      Map<String, Object> response = jdbcCall 
        .withProcedureName(message.getProcedure()) 
        .execute(message.getParams()); 

      System.out.println(response.toString()); 
     } 
    } 
} 

をしかし、今、私は明示的に呼び出すことにより、関数のパラメータに宣言する必要はjdbcCall.declareParameters()それ以外のコードは動作しません。

関数パラメータの名前と型を動的に検出し、関数名だけを渡して異なる関数を呼び出す方法がありますか?

答えて

1

I figured it out

使用するデータベースが 春サポートデータベースでない場合は、明示的な宣言が必要です。現在Springは、Apache Derby、 DB2、MySQL、Microsoft SQL Server、Oracle、およびSybaseのストアド・プロシージャ・コールのメタデータ検索 をサポートしています。 MySQL、Microsoft SQL Server、 およびOracleのストアドファンクションの メタデータ検索もサポートしています。

そして、私はPostgresを使用しています。

関連する問題