将NULL传递给SQL查询

时间:2014-08-21 09:32:52

标签: java sql

我通过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开发人员中返回结果。

1 个答案:

答案 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,则结果集可能不为空。