我通过QueryRunner得到null结果,但是如果我执行查询,我会在SQL开发人员中重新获得行。
ProductId: null
SKUCode:61334a
ServiceResult<List<T>> market = service.getMarketProduct(null,'61334a');
上面提到的服务代码将命中如下所示的DAO层:
return QueryHelper.queryList( GET_PRODUCTS, new Object[]{ 0 == ProductId? null : ProductId, SKUCode}, this.cs, CPCMarketProductVO.class );
GET_PRODUCTS= SELECT * FROM table WHERE ProductId= nvl(?, ProductId) AND prd_id = nvl(?, SKUCode).
有人可以告诉我为什么我通过java代码获得null结果以及如何在SQL开发人员中返回结果。
答案 0 :(得分:0)
我认为你在what NVL
function is for中有点困惑。实际上,当查询返回NULL
值并且您正在执行某种operation or aggregate function in it时,它非常有用。相反,您正在使用它来创建请求。
您可能应该在
之类的内容中更改GET_PRODUCTS
查询
GET_PRODUCTS= SELECT * FROM table WHERE ProductId = ? AND prd_id = ?
当您使用?
和值new Object[]{ 0 == ProductId? null : ProductId, SKUCode}
替换ProductId = null, SKUCode = 61334a
值时,查询将变为:
GET_PRODUCTS= SELECT * FROM table WHERE ProductId = null AND prd_id = 61334a
返回一个空的结果集,如果ProductId不可为空,这应该是正确的(我假设它是一个主键)。
如果您的表中包含NULL
ProductIds,则结果集可能不为空。