我从数据库中通过(em.createNativeQuery(SQL).getResultList())取得数据,大致结构如下[[a,b,12],[c,d,null],[e,f,23]]由于我想从中取出a,b,12....等的值,因此将该List中的元素List.get(i)转换成了Ventor型,可是当取到List.get(1)(即第二组数据时),竟然能取到并且输出了第三个字段,结果为null。但是我想要在java中对其处理啊。比如,如果它为null的话,我就给我需要赋值的字段赋值为""。可是我现在不知道该如何比较它啊,我试过List.get(1).get(2).equals(null)(就是null),我知道这样的方法,及List.get(1).get(2)==null;都是不可取的,我该怎么办啊?大侠,很急啊!!

解决方案 »

  1.   

    不会吧,难道是List.get(1).get(2).equals("null")?
      

  2.   

    -----------这是一个sessionbean
    package com;import java.util.Collections;
    import java.util.List;import javax.ejb.Local;
    import javax.ejb.Stateless;import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;@Stateless(name = "SessionEAO", mappedName = "TEST_1-SessionEJB")
    @Local
    public class SessionEAOBean implements SessionEAOLocal {
        @PersistenceContext(unitName="Project1")
        private EntityManager em;    public SessionEAOBean() {
        }    public Object mergeEntity(Object entity) {
            return em.merge(entity);
        }    public Object persistEntity(Object entity) {
            em.persist(entity);
            return entity;
        }    /** <code>select o from Departments o</code> */
        public List<Departments> queryDepartmentsFindAll() {
            return em.createNamedQuery("Departments.findAll").getResultList();
        }    public void removeDepartments(Departments departments) {
            departments = em.find(Departments.class, departments.getDepartmentId());
            em.remove(departments);
        }    public List queryTable() {
            Query query;
            query = em.createNativeQuery("select department_id,DEPARTMENT_NAME,MANAGER_ID,LOCATION_ID from departments order by department_id desc");
            System.out.println("EAO.......");
            return query.getResultList();
        }
    }
    ---------用这个调用上面的sessionbeanpackage com;import java.util.ArrayList;
    import java.util.List;import java.util.StringTokenizer;import javax.ejb.EJB;
    import javax.ejb.Local;
    import javax.ejb.Stateless;import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;@Stateless(name = "SessionBF", mappedName = "TEST_1-SessionEJB")
    @Local
    public class SessionBFBean implements SessionBFLocal {
        @PersistenceContext(unitName="Project1")
        private EntityManager em;    public SessionBFBean() {
            System.out.println("BF....Constructor");
        }
        @EJB
        SessionEAOLocal eao;
        public List<ListBean> obtainTable(){
              List<ListBean> tableList = new ArrayList<ListBean>();
              List result = new ArrayList();
              System.out.println("BF....Before get queryResult....");
              result = eao.queryTable();--由于在得到的数据中,因为第三列有空的值,所以如果System.out.println(result);时,就会出现类似上述所说的情况。因此不知道该如何判断!!大侠啊。。T_T
              for(i = 0; i < result.size(); i++){              Vector vr = Vector(result.get(i));
                  //-----下面四行就是赋值,我就不具体写了,就是在这里在每次赋值前要判断是否为空,不为空则按对应的数据转换,为空则用""代替并对应赋值。
                  lb.setDeptid(deptid);
                  lb.setDeptname(name);
                  lb.setMgrid(mgrid);
                  lb.setLctid(lcnid);
                  tableList.add(lb);
              }
         }---------------上面所使用的到ListBean.java,其中get和set方法都是自动生成的package com;public class ListBean {
        public ListBean() {
        }
        private long _deptid;
        private String _deptname;
        private long _mgrid;
        private long _lctid;
        public void setDeptid(long _deptid) {
            this._deptid = _deptid;
        }    public long getDeptid() {
            return _deptid;
        }    public void setDeptname(String _deptname) {
            this._deptname = _deptname;
        }    public String getDeptname() {
            return _deptname;
        }    public void setMgrid(long _mgrid) {
            this._mgrid = _mgrid;
        }    public long getMgrid() {
            return _mgrid;
        }    public void setLctid(long _lctid) {
            this._lctid = _lctid;
        }    public long getLctid() {
            return _lctid;
        }
    }
    大哥,帮帮我吧,小弟先谢过了!
      

  3.   

    将逻辑封装在ListBean的set方法中,举例:public void setDeptname(String _deptname) { 
            if(_deptname==null){
              _deptname="";
            }
            this._deptname = _deptname; 
        } 
      

  4.   

    我现在是第三个字段里的数据,就是_mgrid会有空值,那么就不能这么写了啊!会出现很多的数据转换的啊!如若将_mgrid改为String,那么在最后得到的那个tableList的时候,排序就不会按照正常的数字排序了,比如有10,100,20,200,我想要得到的是10,20,100,200可是根据String排序就会变成100,10,200,20了。大侠,再帮忙想想办法啊!!
      

  5.   

    各位大侠,我刚才用try catch尝试了下,程序能走下去了,也能得到结果了,不过就是会捕捉到很多异常,或许能对您帮我解答问题有帮助!以下是保持_mgrid为long类型的异常,但最终跟我做的表还是有差别的,因为会将其默认为0,而我是不想显示的。
    java.lang.NullPointerException
    at com.SessionBFBean.obtainTable(SessionBFBean.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:187)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:126)
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:114)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
    at com.bea.core.repackaged.springframework.jee.spi.MethodInvocationVisitorImpl.visit(MethodInvocationVisitorImpl.java:15)
    at weblogic.ejb.container.injection.EnvironmentInterceptorCallbackImpl.callback(EnvironmentInterceptorCallbackImpl.java:54)
    at com.bea.core.repackaged.springframework.jee.spi.EnvironmentInterceptor.invoke(EnvironmentInterceptor.java:30)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
    at com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:126)
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:114)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
    at com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:210)
    at $Proxy103.obtainTable(Unknown Source)
    at com.SessionBF_z03e9c_SessionBFLocalImpl.obtainTable(SessionBF_z03e9c_SessionBFLocalImpl.java:59)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at oracle.adf.model.binding.DCInvokeMethod.invokeMethod(DCInvokeMethod.java:563)
    at oracle.adf.model.binding.DCDataControl.invokeMethod(DCDataControl.java:2119)
    at oracle.adf.model.bc4j.DCJboDataControl.invokeMethod(DCJboDataControl.java:2929)
    at oracle.adf.model.bean.DCBeanDataControl.invokeMethod(DCBeanDataControl.java:396)
    at oracle.adf.model.binding.DCInvokeMethod.callMethod(DCInvokeMethod.java:258)
    at oracle.jbo.uicli.binding.JUCtrlActionBinding.doIt(JUCtrlActionBinding.java:1441)
    at oracle.adf.model.binding.DCDataControl.invokeOperation(DCDataControl.java:2126)
    at oracle.adf.model.bean.DCBeanDataControl.invokeOperation(DCBeanDataControl.java:414)
    at oracle.adf.model.adapter.AdapterDCService.invokeOperation(AdapterDCService.java:311)
    at oracle.jbo.uicli.binding.JUCtrlActionBinding.invoke(JUCtrlActionBinding.java:697)
    at oracle.jbo.uicli.binding.JUMethodIteratorDef$JUMethodIteratorBinding.invokeMethodAction(JUMethodIteratorDef.java:174)
    at oracle.jbo.uicli.binding.JUMethodIteratorDef$JUMethodIteratorBinding.executeQuery(JUMethodIteratorDef.java:377)
    at oracle.adfinternal.view.faces.model.binding.FacesCtrlRangeBinding.__setSortCriteria(FacesCtrlRangeBinding.java:254)
    at oracle.adfinternal.view.faces.model.binding.FacesCtrlHierBinding$FacesModel.setSortCriteria(FacesCtrlHierBinding.java:339)
    at org.apache.myfaces.trinidad.component.UIXCollection.setSortCriteria(UIXCollection.java:470)
    at org.apache.myfaces.trinidad.component.UIXTable.setSortCriteria(UIXTable.java:195)
    at org.apache.myfaces.trinidad.component.UIXTable.broadcast(UIXTable.java:259)
    at oracle.adf.view.rich.component.UIXTable.broadcast(UIXTable.java:139)
    at org.apache.myfaces.trinidad.component.UIXCollection.broadcast(UIXCollection.java:153)
    at org.apache.myfaces.trinidad.component.UIXTable.broadcast(UIXTable.java:270)
    at oracle.adf.view.rich.component.UIXTable.broadcast(UIXTable.java:139)
    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.broadcastEvents(LifecycleImpl.java:754)
    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:282)
    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:175)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
    at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:181)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
    at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:85)
    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:279)
    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._invokeDoFilter(TrinidadFilterImpl.java:239)
    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:196)
    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:139)
    at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
    at oracle.security.jps.wls.JpsWlsFilter.doFilter(JpsWlsFilter.java:102)
    at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:65)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3496)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
      

  6.   

    最好在存数据库时如果没有值就设定为默认值0或者"",避免出现null。
    也可以在从数据库里取值的时候通过oracle的nvl函数设定null为默认值。或通过is null,is not null进行比较。
      

  7.   

    要是在java里处理的话,你那个字段如果是String型的,你可以把栏位取出后强制转换为字符串型的(String)List.get(1).get(2),
    再通过(String)List.get(1).get(2)==null进行判断。
      

  8.   

    用前加判断,再不然就不要取出空值来,在sql内加个条件。
    反正前不堵就后堵。
      

  9.   

    方法一:在数据查询SQL中加NVL
    方法二:if(null == object)~用这样地形式做判断可以有效地避免空异常错误