我有一个存储过程,我试图从我的DAO实现类执行。但我没有得到任何结果。在我的列表上,我看到返回值为null。
执行存储过程的DAO代码
编辑Dao:
@RequestMapping(value = "/getData",method = RequestMethod.POST)
public List getData(@RequestBody Result result){
List l =ohlcService.getData(result);
return l;
}
我尝试将setparameters更改为setInteger for int field但仍然没有结果。
DefaultController.java
控制器类调用服务和服务调用dao。 service只有一个带getData方法和一个实现类的接口类。
USE [Wealth_1_0_0_Srv]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[getOhlc]
(
@stockSymbol varchar(50),
@statementType varchar(50),
@financialDataTypeId int,
@fiscalYearId int
)
As
Begin
Set Nocount on;
Set Arithabort on;
Select fdd.FinancialHeadId,isnull(ftd.FinancialHeadText,fh.FinancialHeadName)FinancialHeadName,fdd.Value,isnull(ftd.Bold,0)Bold,isnull(ftd.RowSeq,0)RowSeq
from FinancialDataMast fdm
inner join FinancialDataDetl fdd on fdd.MastId=fdm.Id
inner join FinancialHeading fh on fh.Id=fdd.FinancialHeadId
inner join Stock s on s.Id=fdm.StockId
INNER JOIN StatementType st ON st.Id = fdm.StatementTypeId
left outer join FinancialTemplateMast ftm on ftm.StatementTypeId=fdm.StatementTypeId and ftm.SectorId=s.SectorId and ftm.FinancialReportType=(Case fdm.FinancialDataTypeId when 0 then 2 else 1 end)
left outer join FinancialTemplateDetl ftd on ftd.MastId=ftm.Id and ftd.FinancialHeadId=fdd.FinancialHeadId
where s.StockSymbol=@stockSymbol and st.StatementTypeName=@statementType and fdm.FinancialDataTypeId=@financialDataTypeId and fdm.FiscalYearId=@fiscalYearId
order by isnull(ftd.RowSeq,0) asc
End
我的存储过程
GameManager.prototype.initGame = function () {
var api = 'my_url';
$.ajax({
url : api,
type : 'POST',
data: "",
dataType : 'json',
success : function(data) {
alert(data);
}
});
};
我的参数很好。在调试模式我可以看到他们但我没有得到任何结果集。
答案 0 :(得分:0)
看起来你正在调用过程,它不返回值 - 只是在里面执行查询,你应该创建函数。
答案 1 :(得分:0)
试试这个:
System.out.println(String.format("stockSymbol %s, statementType %s, financialDataTypeId %d, fiscalYearId %d", result.getStockSymbol(), result.getStatementType(), result.getFinancialDataTypeId(), result.getFiscalYearId()));
SQLQuery query = session.createSQLQuery("EXEC getOhlc :stockSymbol, :statementType, :financialDataTypeId, :fiscalYearId");
query.setString("stockSymbol",result.getStockSymbol());
query.setString("statementType",result.getStatementType());
query.setInteger("financialDataTypeId",result.getFinancialDataTypeId());
query.setInteger("fiscalYearId",result.getFiscalYearId());
List l = query.list();
请在休眠配置中添加以下行:
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
或者如果您使用log4j,请添加:
log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
通过这种方式,您可以查看执行的内容。
答案 2 :(得分:0)
谢谢所有回复的人。问题不在于proc。这是映射问题所以我映射了所有返回的列,如此
query.addScalar("FinancialHeadId", IntegerType.INSTANCE);
query.addScalar("FinancialHeadName", StringType.INSTANCE);
query.addScalar("Value",IntegerType.INSTANCE);
query.addScalar("Bold",IntegerType.INSTANCE);
query.addScalar("RowSeq",IntegerType.INSTANCE);
问题解决了。