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
但我不明白爲什麼它會做到這一點。此外,我試圖使類作爲一個非靜態類太多,但它仍然給了同樣的錯誤:Deferencing空指針
"Possible deferencing Null Pointer"
第一線,你可以發佈堆棧跟蹤?你在哪一行獲得NPE? –
在運行時你會得到一個真正的'NullPointerException'嗎?還是你在編譯時得到'可能的引用空指針'警告? java編譯器通常不會發出這樣的警告,您是使用FindBugs還是類似的工具? –
除非您有充分的理由這麼做,否則絕對不要在您的代碼中捕獲'NPE'。只有在以任何方式使異常可見時才捕獲任何'RuntimeException',否則您無法知道發生了什麼。 – skiwi