데이터베이스의 Product to Product 테이블을 추가하는이 코드는 있지만 둘 이상의 행을 추가하는 코드입니다. 위의 코드에서 볼 수 있듯이 제품이 다음 확인으로 삽입 테이블에 존재하지 않는 경우, 내가 확인하고 있습니다이 코드가 데이터베이스에 둘 이상의 행을 삽입하는 이유는 무엇입니까?
public int addProduct(Products product, String supplierName) {
//find a product
String checkAllProducts = "SELECT * FROM products WHERE product_name = ?";
//Insert product and supplier id where supplier exist in suppliers table sql statement
String insertSql = "INSERT INTO products (product_name, product_type, supplier_id, number_of_stocks, price_per_unit, packaging_type) SELECT ?,?,suppliers.supplier_id,?,?,? FROM suppliers WHERE suppliers.supplier_name = ?";
//Get connection
Connection conn = DbUtil.getConnection();
//Resultset for checking existing products
ResultSet resultSet = null;
int inserted = 0;
try {
//Prepare check all products statement
allProducts = conn.prepareStatement(checkAllProducts);
allProducts.setString(1, product.getProductName());
resultSet = allProducts.executeQuery();
//If doesn't exist in products table
if (!resultSet.next()) {
//Prepare insert statement
addProduct = conn.prepareStatement(insertSql);
//Get product parameter's data
addProduct.setString(1, product.getProductName());
addProduct.setString(2, product.getProductType());
addProduct.setInt(3, product.getNumberOfStocks());
addProduct.setBigDecimal(4, product.getPricePerUnit());
addProduct.setString(5, product.getPackagingType());
addProduct.setString(6, supplierName);
//Confirm insert
int confirmation = JOptionPane.showConfirmDialog(null, "Are you sure you want to insert this product?", "Insert Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (confirmation == JOptionPane.YES_OPTION) {
//execute insert
inserted = addProduct.executeUpdate();
}
}//Else don't insert and show error messages.
else {
JOptionPane.showMessageDialog(null, "Product already exists.", "Invalid insert.", JOptionPane.ERROR_MESSAGE);
}
} catch (SQLException ex) {
Logger.getLogger(ProductDAO.class.getName()).log(Level.SEVERE, null, ex);
} finally {
DbUtil.close(conn, allProducts, resultSet);
DbUtil.close(conn, addProduct, resultSet);
}
return inserted;
}
:
여기에 코드입니다. 성공적으로 추가 중이지만 둘 이상의 행이 추가됩니다. 예를 들어, productDao 객체를 초기화했고이 방법으로 테스트했습니다 : productDAO.addProduct(new Products("Hotdogs", "Full", 55, new BigDecimal(0.30), "Box"), "Wing Yip");
. 그렇게 한 후 아래의 이미지 링크에서 볼 수있는 것처럼 14 개의 이미지가 삽입되었습니다. 이런 일이 왜
는 아는 사람 있나요? 제게 고마워요.
삽입물이 '선택'문장의 결과를 삽입하고 있습니다. 아마도 이것을 의미하는 것이 아닙니다. 그리고이'select '는 당신이 검사하고있는 것과 같은'select'가 아닙니다 –
@ Skary Wombat인가요? 글쎄, 나는'supplier_id'를 삽입하고 싶습니다. 당신이 말한 것은 제 의도는 아닙니다. 내 진술이 틀렸어? –
'SELECT?,?, suppliers.supplier_id,?,?,? '를 실행 해보십시오. FROM 제품, 공급 업체 where products.supplier_id = suppliers.supplier_id 및 suppliers.supplier_name =? ";'별도로 어떤 결과를 얻었는지 확인 –