liveno 发表于 2008-4-16 18:17

关于数据库链接 返回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这个错误是怎么出现的呢?
还请高手指教

mszhou 发表于 2008-4-17 14:32

你都没说你是直连还是桥连

qw654 发表于 2008-4-17 14:33

好难看  我晕











[img]http://www.ahcomic.com/bbs/images/common/sigline.gif[/img]
[url=http://www.aliyouxi.com/]小游戏[/url]

Starlove 发表于 2008-4-18 15:24

估计是rs.getString有问题
打出来看一下

菜鸟也疯狂 发表于 2008-4-20 22:46

好像即使没有查找到ResultSet也是不为NULL的(具体是不是,我也记不大清楚了),所以它不会进入if(rs==null)里面,而是进入到"else"里,这样rs.next()就会抛空指针异常.你可以设置断点跟踪一下程序的运行情况.或者直接直接打印ID=2时的rs的值看下.

[[it] 本帖最后由 菜鸟也疯狂 于 2008-4-20 22:47 编辑 [/it]]

netstriker 发表于 2008-4-21 12:08

我想问一下,你的意思是说如果在ID=2这种商品没有的话,不要报错,只是把这一个没有这一个结果放到ession.setAttribute("product_exist","false");,对吧;
     rs=dbcon.query(query);这一个查询后,是空集的话不一定是说rs这一个对象是空,只能说rs这一个集合没有值而已,或者你可以试一下用 先select count(*) from XXXXX,然后在数据集那里判断一下rs.getInt(1);如果返回的是0的话,则说明数据库里没有记录了。。。。。,如果还有什么问题的话,就继续提出来吧.......

liveno 发表于 2008-4-21 16:12

回复 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这个错是哪里冒出来的呢?

页: [1]

编程论坛