Java Spring:带有动态参数的SimpleJdbcCall

Java Spring:带有动态参数的SimpleJdbcCall,java,spring,spring-jdbc,Java,Spring,Spring Jdbc,我有一个用于调用postgres函数的dao: public final class AuthDAO extends UntypedActor { private final ActorRef manager; private final JdbcTemplate jdbcTemplate; private final SimpleJdbcCall jdbcCall; public AuthDAO(ActorRef manager) { t

我有一个用于调用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());
        }
    }
}
public final类AuthDAO扩展了UntypedActor{
私人最终代理基金经理;
私有最终JdbcTemplate JdbcTemplate;
私有最终SimpleJdbcCall;
公共授权DAO(ActorRef管理器){
this.manager=经理;
jdbcTemplate=DBConfig.jdbcTemplate();
jdbcall=newsimplejdbccall(jdbcTemplate)
.withSchemaName(“auth”)
.withCatalogName(“公共”)
.withoutProcedureRecolumnMetadataAccess();
}
创建公共静态道具(ActorRef管理器){
返回Props.create(AuthDAO.class,manager);
}
@凌驾
公共void onReceive(对象o)抛出可丢弃{
if(o DBMessage的instanceof){
DBMessage message=(DBMessage)o;
declareParameters(新的SqlParameter(“login”,Types.VARCHAR));
Map response=jdbcCall
.withProcedureName(message.getProcedure())
.execute(message.getParams());
System.out.println(response.toString());
}
}
}
但现在我必须通过调用
jdbcCall.declareParameters()
在函数的参数中显式声明,否则代码将无法工作

那么,有没有一种方法可以动态检测函数参数的名称和类型,并使用这种dao调用只传递函数名称的不同函数呢?

I

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

而且,天哪,我用Postgres