如何在java中将null传递给SQL参数?

时间:2016-11-25 11:42:18

标签: java hibernate jpa oracle10g

我有一个场景,我必须通过java将null传递给SQL参数,但我得到SQLGrammarException。如果我传递一些价值,它工作正常。如果我错了,请指导。

以下是我的代码:

StringBuffer query;
    query = new StringBuffer(
    "SELECT * "+ 
         "FROM table(package.func(travel_type => travel_search_type("+
             "travel_place_no => :travelPlaceNo"+
             ")))" );
        Query query1 = em.createNativeQuery(query.toString());
    query1.setParameter("travelPlaceNo",null);

    searchresults = query1.getResultList();

例外:

  

org.hibernate.exception.SQLGrammarException

这是我通过SQL Developer所做的,它运行良好:

    SELECT *
 FROM table(package.func(travel_type => travel_search_type(
     travel_place_no => NULL))) ; 

请指导。

1 个答案:

答案 0 :(得分:3)

在调用方法的2个参数签名时,null不是允许的值。相反,您可以使用指定数据类型的3参数签名setParameter(String name, Object val, Type type),它应该可以工作。

修改

好的,我发现还有另一个问题:即使替换者工作,你要执行的是a >= NULL。在这种情况下,我担心您将不得不手动处理StringBuffer创建。也许只是在没有参数的情况下强制一个总是假的条件,如果它是null,比如`1!= 2',否则就像你在你的sql例子上那样处理它(写手工' NULL'而不是参数占位符)。