2013-11-24 175 views
0

我有這種包含三個文本字段和兩個單選按鈕的表單。該表格應該爲客戶計算帳單金額。我寫了下面的代碼,它顯示了一個NullPointerException錯誤。SQL代碼的NullPointerException錯誤

int noproduct; 
double totalprice, price, shipcharge; 
try{ 
    Connection connection=getConnection(); 
    stmt=connection.createStatement(); 
    ResultSet rs1=stmt.executeQuery("Select count(ProductName) from buy;"); 
    ResultSet rs2=stmt.executeQuery("Select sum(price) as TPrice from buy;"); 
    noproduct=rs1.getInt("count(ProductName)"); 
    NoProducts.setText(""+noproduct); 
    price=rs2.getDouble("TPrice"); 
    shipcharge=3 * noproduct; 
    ShipCharges.setText(""+shipcharge); 
    totalprice=price+shipcharge; 
    TotalPrice.setText(""+totalprice); 
    if(CashRB.isSelected()){ 
     totalprice=totalprice+(5*noproduct); 
     JOptionPane.showMessageDialog(null,"You have paid the bill by Cash!"); 
    } 
    else if(CCardRB.isSelected()){ 
     totalprice=totalprice-(5*noproduct); 
     JOptionPane.showMessageDialog(null,"You have paid the bill using Credit Card!"); 
    } 
} 
catch(Exception ex){ 
    System.out.println(ex.toString()); 
    ex.printStackTrace(); 
} 
finally{} 

這條線在具體示出了錯誤:

noproduct=rs1.getInt("count(ProductName)"); 

我需要交替代碼,以顯示相同的結果,因爲這。

,以及它顯示了這些錯誤,我真的不明白他們是什麼:

java.lang.NullPointerException 
     at com.mysql.jdbc.ResultSetImpl.buildIndexMapping(ResultSetImpl.java:709) 
     at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1069) 
     at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2734) 

誰能幫助我嗎?先謝謝你。

+0

錯誤..你考慮重構代碼,並分解成更小的部分? – svz

+1

@svz:這是MySQL JDBC驅動程序代碼,而不是OP的代碼。 –

+0

@LuluLala:另一條語句爲總和分配一個別名。你爲什麼不在第一個語句中做同樣的事情,併爲計數分配一個別名? –

回答

1

改變這

rs1.next(); 
noproduct=rs1.getInt(1); 

see here

有一個ResultSet允許在一個Statement。可能你在這種情況下得到了Exception。因爲你使用了ResultSet res1和rs2。

+0

它顯示此錯誤:'''java.sql.SQLException:ResultSet關閉後不允許操作' – LuluLala

+0

你能顯示你的getConnection()函數嗎? – subash

+0

對不起,我是新手。你的意思是我使用MySQL爲表單建立連接的代碼? – LuluLala

0

試試這個

ResultSet rs1=stmt.executeQuery("Select count(ProductName) as NoOfProducts from buy;"); 
rs1.next(); 
noproduct=rs1.getInt("NoOfProducts"); 
+0

我以前試過,它顯示相同的錯誤。 – LuluLala

0

您需要rs1.next()光標調用值。

while(rs1.next()){ 
    noproduct=rs1.getInt("count(ProductName)"); 
} 
+0

它顯示一個警告,可能不會爲下一行初始化'noproducts'。 – LuluLala

+0

警告是因爲您聲明瞭「noproduct」而沒有默認值。如果代碼不執行while代碼塊('noproduct = 0;'在while之前),則分配一個默認值, – clubifaximatic

0

這種類型的錯誤發生在您直接訪問resultset而不會使其失效時。

您可以通過itrate解決問題的結果集和獲得的值:行2734

while (resultSet.next()) 
     { 
      JSONObject response = new JSONObject(); 
      response.put("dish_title", resultSet.getString("dish_title")); 
      int remainingQuantity = resultSet.getInt("quantity") - 
     }