我有一个使用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来调用只传递函数名的不同函数?
答案 0 :(得分:1)
如果您使用的数据库不是a,则必须使用显式声明 Spring支持的数据库。目前,Spring支持元数据查找 存储过程调用以下数据库: Apache Derby, DB2,MySQL,Microsoft SQL Server,Oracle和Sybase 。我们也支持 MySQL,Microsoft SQL Server的存储函数的元数据查找 和Oracle 。
而且,omg,我使用Postgres。