Spring:带有动态参数的SimpleJdbcCall

时间:2017-04-27 11:31:39

标签: java spring spring-jdbc

我有一个使用SimpleJdbcCall调用postgres函数的dao:

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()在函数的参数中明确声明,否则代码不会起作用。

那么有没有办法动态检测函数参数的名称和类型,并使用这样的dao来调用只传递函数名的不同函数?

1 个答案:

答案 0 :(得分:1)

figured it out

  

如果您使用的数据库不是a,则必须使用显式声明   Spring支持的数据库。目前,Spring支持元数据查找   存储过程调用以下数据库: Apache Derby,   DB2,MySQL,Microsoft SQL Server,Oracle和Sybase 。我们也支持    MySQL,Microsoft SQL Server的存储函数的元数据查找   和Oracle

而且,omg,我使用Postgres。