1

私は食料品店に支払いデスクを構築しようとしていますが、コードは実際に意図したとおりに実行されますが、1 つだけです。

ユーザーに必要なアイテムの数を入力するように依頼した後、製品情報が収集され、正常に機能しますが、次の製品の製品 ID を入力するようにユーザーに要求することになっている場合、行が繰り返され、次のようになります。私のキャッチの例外:「空の結果セットに対する不正な操作」。繰り返しますが、その行の繰り返しを除いて、すべての計算とすべてが問題ありません。何が問題なのかについてのアイデアはありますか?

繰り返しの出力は次のようになります。

製品を入力 (または終了):

ERROR1: 空の結果セットに対する不正な操作です。

製品を入力 (または終了):

そして、これがコードです。

try {
  Class.forName("com.mysql.jdbc.Driver");
  String connection = "jdbc:mysql://myDB?";
  connection = connection + "user=xxx&password=xxxxxx";
  Connection conn = DriverManager.getConnection(connection);
  // MATA IN PRODUKTNUMMER
  System.out.println("\nEnter product (or Exit):");
  GroceryStore.input = GroceryStore.scan.nextLine();

  PreparedStatement stmt = conn.prepareStatement(
          "SELECT * "+
          "FROM Products "+
          "WHERE productNo = ?");
          stmt.setString(1, GroceryStore.input); 

          ResultSet rs = stmt.executeQuery();
          rs.next();

    pName = rs.getString("productName");
    System.out.println("Product: " + pName);

    // MATA IN ANTAL
    System.out.println("\nEnter amount:");
    GroceryStore.amount = GroceryStore.scan.nextInt();


    pPrice = rs.getDouble("productPrice");
    priceRounded = new BigDecimal(pPrice).setScale(2, BigDecimal.ROUND_FLOOR);
    amountRounded = new BigDecimal(GroceryStore.amount).setScale(0);
    priceRounded = priceRounded.multiply(amountRounded);
    GroceryStore.sum = GroceryStore.sum.add(priceRounded);

    inOut.output();  
    inOut.input();
    conn.close();
    }
    catch (Exception e) {
         System.out.println("ERROR1: " + e.getMessage());
    }
4

2 に答える 2

5

結果セットにデータまたは行が含まれているかどうかを確認していません。

ResultSet rs = stmt.executeQuery();
rs.next();
...
...

結果が空であるか、行があるかどうかを確認する必要があります。

ResultSet rs = stmt.executeQuery();
if(rs.next()){
.....
your code
.....
}
于 2013-02-28T10:51:04.070 に答える
2

結果セットから実際に値を取得する前に、結果セットが空かどうかを確認していません...

next() は、結果セットにデータがある場合は true を返し、カーソル位置にデータがない場合は false を返します コードを次のように配置します

While(rs.next())
{
    pName = rs.getString("productName");
    System.out.println("Product: " + pName);

    // MATA IN ANTAL
    System.out.println("\nEnter amount:");
    GroceryStore.amount = GroceryStore.scan.nextInt();


    pPrice = rs.getDouble("productPrice");
}
于 2013-02-28T10:59:13.837 に答える