2015-04-02 44 views
0

我有一個方法,在一類名爲ProductInsert如下:方法返回空值,數據庫語句

public float insertPrice() { 
     try { 
      System.out.println("Enter Product Price:"); 
      setProductPrice(scanFloat.nextFloat()); 
     }catch (InputMismatchException e){ 
      System.out.println("Invalid Input!"); 
      new ProductInsert().insertPrice(); 
     } 
     return getProductPrice(); 
    } 

我有另一個類名爲ProductServices,用下面的預處理語句的數據庫執行:

  PreparedStatement pstm = con.prepareStatement(insertQuery); 
      pstm.setFloat(2, insertPrice()); 

所以當用戶在詢問價格時輸入字符串值「asdfad」時,它會返回InputMismatch異常並再次調用insertPrice方法。並且在第二次調用它的情況下,並且用戶輸入浮點值「230.00」時,pstm.setfloat獲得空值並在數據庫中插入「0.00」而不是「230.00」。爲什麼???

setter和getter產品價格:

public float getProductPrice() { 
     return productPrice; 
    } 

    public void setProductPrice(float productPrice) { 
     this.productPrice = productPrice; 
    } 
+0

顯示'setProductPrice()'和'getProductPrice()' – 2015-04-02 16:48:24

回答

1

當有一個例外,創建一個新的例如new ProductInsert().insertPrice();

從初始調用返回的值insertPrice()是此ProductPrice實例(準備語句的那個​​實例)的值,未設置(或設置爲0.0)。

catch,直接調用insertPrice()沒有new ProductPrice(),但你肯定需要重置或使用了錯誤的輸入,例如

//... 
catch (InputMismatchException e){ 
     System.out.println("Invalid Input!"); 
     scanFloat.nextLine(); // will "eat" the wrong entry 
     insertPrice(); // try again 
} 
+0

當我打電話insertPrice()直接,它進入一個無限循環。還有什麼建議? – prabhav4947 2015-04-02 17:05:53

+0

因爲當scanFloat()不是float時,它不消耗輸入。 'scanFloat'是一個'Scanner'實例嗎? – 2015-04-02 17:07:38

+0

yep scanFloat()是一個掃描器實例 – prabhav4947 2015-04-02 17:10:20