【问题标题】:Exception in thread main java.lang.NullPointerException while fetching value from database从数据库中获取值时线程主 java.lang.NullPointerException 中的异常
【发布时间】:2014-02-16 15:20:45
【问题描述】:

我只是想在 Eclipse 上运行一个有问题的 java 程序,但得到 NullPointerException。我的代码贴在下面。请告诉我我做错了什么。

矩形.java

package org.spring.model;

public class Rect {

    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public Rect(int rectId, String rectName)
    {
        setId(rectId);
        setName(rectName);
    }


}

JdbcDaoImplement.java

    package org.spring.dao;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;

    import org.spring.model.Rect;

public class JdbcDaoImplement {

    public Rect getRect(int rectId)
    {
        Connection conn=null;

        try
        {
            Class.forName("oracle.jdbc.OracleDriver");
            String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";
            conn = DriverManager.getConnection(jdbcUrl, "system", "abcd");
            PreparedStatement ps=conn.prepareStatement("SELECT * FROM RECTANGLE WHERE id=?");
            ps.setInt(1, rectId);

            Rect rect=null;
            ResultSet rs=ps.executeQuery();
            if(rs.next()==true)
            {
                rect=new Rect(rectId,rs.getString("name"));
            }
            rs.close();
            ps.close();
            return rect;
        }
        catch(Exception e)
        {
            throw new RuntimeException();
        }
        finally
        {
            try {
                conn.close();
            } catch (SQLException e) {
                //e.printStackTrace();

            }
        }
    }

}

最后,JdbcDemo.java

package org.spring;

import org.spring.dao.JdbcDaoImplement;
import org.spring.model.Rect;

public class JdbcDemo {

    public static void main(String[] args) {
        Rect rect=new JdbcDaoImplement().getRect(1);
        System.out.println(rect.getName());
    }

}

堆栈跟踪是:

Exception in thread "main" java.lang.NullPointerException
    at org.spring.JdbcDemo.main(JdbcDemo.java:10)

【问题讨论】:

  • 如果您要告诉我们异常情况,请提供完整的堆栈跟踪。
  • 好的,我编辑并重新发布了带有完整堆栈跟踪的问题。

标签: java jdbc dao


【解决方案1】:

很可能在您的主要方法中rect 为空,而您调用了rect.getName(),然后Bang! NPE。

因为在你的getRect(int rectId)方法中,你在方法中处理了异常,然后返回一个rect,如果出现问题或者rs.next()为假,你将返回一个空的rect对象。

你可以考虑做的是,要么重新设计getRect() 方法,让它永远不返回null,例如,如果没有找到记录,或者发生异常,则抛出异常;或者在你的 main 方法中,检查rect,确保它不为空。

【讨论】:

  • 好的,我更改了代码并重新编辑了问题...但仍然出现相同的错误。
  • 你调试过你的代码吗?例如rs.next() 返回真还是假?先调试试试!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多