取消引用空指针

时间:2014-01-22 07:55:36

标签: java

public class Model
{
    public static Connection getConnection()
    {
        Connection conn = null;
    try
    {
        Class.forName("oracle.jdbc.OracleDriver");
        conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",       "System", "system");
    }
    catch(ClassNotFoundException e)
    {
        e.printStackTrace();
    }
    catch(SQLException e)
    {
        e.printStackTrace();
    }
    return conn;
}

public static class Cart
{
    public String itmName="";
    public int howmany=0;
    public static long itmQty=0, itmID=0;
    public double itmPrice=0.0, itmCost=0.0, totalSum=0.0;
} 

public static ArrayList<Cart> getCartDatabase(String user) throws Exception
{
    Connection conn = getConnection();
    String sql = "select * from userCarts where userID = '" + user + "'";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    ResultSet rst = pstmt.executeQuery();
    ArrayList<Cart> al = null;
    Cart crt=null;
    while(rst.next())
    {
        System.out.println("CPoint");
        try
        {
            long p = rst.getLong("itemID"); 
            crt.itmID = p; // This is the line thats creating the error
            System.out.println(p + " is long! I guess...");
        }
        catch(NullPointerException e)
        {
            System.out.println("NPE Caught in Model");
        }
        System.out.println("CP 1 " + crt.itmID);
        ArrayList<row> alr=null; 
        try
        {
            alr = Model.getStoreInventory();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        System.out.println("CP 2");
        for(int i=0; i<alr.size(); i++)
        {
            crt.itmName = alr.get(i).itmName;
            crt.itmPrice = alr.get(i).itmPrice;
            crt.itmQty = alr.get(i).itmQty;
        }
        System.out.println("CP 3");
        crt.howmany = rst.getInt("howmany");
        crt.itmCost = crt.itmPrice*crt.howmany;
        al.add(crt);
    }
    return al;
    }
}

当我尝试访问getCartFromDatabase的此方法时,它会给出NullPointerException,但我不明白为什么会这样做。此外,我试图将类作为非静态类,但它仍然给出了同样的错误:

  

“可能会引用空指针”

1 个答案:

答案 0 :(得分:2)

Cart crt=null;
while(rst.next())
{
    System.out.println("CPoint");
    try
    {
        long p = rst.getLong("itemID"); 
        crt.itmID = p; // This is the line thats creating the error
        System.out.println(p + " is long! I guess...");
    }
当您尝试访问crt时,

nullcrt.itemID。你必须先为它分配一个实例。

我认为您可能只是将第一行从代码段更改为

Cart crt = new Cart();