我在名为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的类,其中包含以下Prepared语句数据库执行:
PreparedStatement pstm = con.prepareStatement(insertQuery);
pstm.setFloat(2, insertPrice());
因此,当用户输入一个字符串值" asdfad"当询问价格时,它返回一个InputMismatch Exception并再次调用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 :(得分: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
}