当前位置: 代码迷 >> Java Web开发 >> 关于数据库链接 返回NullPointerException的问题
  详细解决方案

关于数据库链接 返回NullPointerException的问题

热度:134   发布时间:2008-04-16 18:17:17.0
关于数据库链接 返回NullPointerException的问题
try{
                query="select * from product where product_ID="+product_ID;
                rs=dbcon.query(query);
                if(rs==null){   
                        session.setAttribute("product_exist","false");
                }
                else{
                    while(rs.next()){
                        session.setAttribute("product_price",rs.getString("product_price"));
                        session.setAttribute("product_producer",rs.getString("product_producer"));
                        session.setAttribute("product_name",rs.getString("product_name"));
                    }
                }
                dbcon.close();
            }
            catch(SQLException   e){
                System.out.println("err:"+e.getMessage());
            }
主要的代码段就在这里了。
是去查询product中的商品,由于数据库中只有ID=1的项目,所以如果是查询1的话,是能够得到正确结果的。
可是当查询ID=2的商品时,rs应该返回一个空集吧?if(rs==null)这个是判断是否得到了一个查询集合,和空集不一样的。不管怎么说,NullPointerException这个错误是怎么出现的呢?
还请高手指教
搜索更多相关主题的帖子: product  数据库  session  setAttribute  

----------------解决方案--------------------------------------------------------
你都没说你是直连还是桥连
----------------解决方案--------------------------------------------------------
好难看  我晕












[url=http://www.aliyouxi.com/]小游戏[/url]
----------------解决方案--------------------------------------------------------
估计是rs.getString有问题
打出来看一下
----------------解决方案--------------------------------------------------------
好像即使没有查找到ResultSet也是不为NULL的(具体是不是,我也记不大清楚了),所以它不会进入if(rs==null)里面,而是进入到"else"里,这样rs.next()就会抛空指针异常.你可以设置断点跟踪一下程序的运行情况.或者直接直接打印ID=2时的rs的值看下.

[[it] 本帖最后由 菜鸟也疯狂 于 2008-4-20 22:47 编辑 [/it]]
----------------解决方案--------------------------------------------------------
我想问一下,你的意思是说如果在ID=2这种商品没有的话,不要报错,只是把这一个没有这一个结果放到ession.setAttribute("product_exist","false");,对吧;
     rs=dbcon.query(query);这一个查询后,是空集的话不一定是说rs这一个对象是空,只能说rs这一个集合没有值而已,或者你可以试一下用 先select count(*) from XXXXX,然后在数据集那里判断一下rs.getInt(1);如果返回的是0的话,则说明数据库里没有记录了。。。。。,如果还有什么问题的话,就继续提出来吧.......
----------------解决方案--------------------------------------------------------
回复 6# 的帖子
谢谢netstriker和菜鸟也疯狂的回复。o(∩_∩)o

如netstriker你所说,我正是想通过判断rs是否是个空集合来觉得决定程序流程。可是该怎么判断呢?我试图将程序改成:
try{
                query="select count(*) from product where product_ID="+product_ID;
                rs=dbcon.query(query);
                if(rs.getInt(1)==0){   
                        session.setAttribute("product_exist","false");
                }
                else{
                query="select count * from product where product_ID="+product_ID;
                rs=dbcon.query(query);
                    while(rs.next()){
                        session.setAttribute("product_price",rs.getString("product_price"));
                        session.setAttribute("product_producer",rs.getString("product_producer"));

程序却出现了错误,连ID=1时的情况也出现了NullPointer的错误,是怎么回事呢?

我不能理解的是,当ID=1的时候是完全正确的结果,这应该说明我的sql语句是没有问题的吧?所以当ID=2而查询数据为空时,得到的rs应该是个空集(确实不是null),而while(rs.next())首先是判断rs.next()是否是null,但跟rs是否为null是完全两回事啊?我之所以用if(rs==null),就是为了表示rs是不为null的。这样说来,nullpointer这个错是哪里冒出来的呢?
----------------解决方案--------------------------------------------------------
  相关解决方案