存储过程不在SQL Server上返回值

时间:2017-03-23 13:59:40

标签: java spring hibernate

我有一个存储过程,我试图从我的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);
        }
    });
};

我的参数很好。在调试模式我可以看到他们但我没有得到任何结果集。

3 个答案:

答案 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);

问题解决了。