2016-04-09 58 views
0

我對Java和Spring有點新,在嘗試爲我正在關注的課程完成作業時遇到了問題。如何使用Java中的外鍵從表中檢索值?

我有什麼做的是建立在Spring MVC一個在線商店,而Web應用程序連接到MySQL數據庫 - 與客戶第一個JSP在那裏我將有選擇,顯示,添加,刪除和修改客戶端 - 第二個JSP與產品具有相同的選項可用(顯示,添加,刪除和修改) - 和最後一個JSP與銷售或交易。

型號/豆

公共類客戶 {

private int clientID; 
private String firstname; 
private String lastname; 
private String address; 
private String city; 
private String country;  

public Client(){ 
} 

public Client(int clientId){ 
    this.clientID=clientId; 
} 

public int getClientID() { 
    return clientID; 
} 

public void setClientID(int clientID) { 
    this.clientID = clientID; 
} 

public String getFirstname() { 
    return firstname; 
} 

public void setFirstname(String firstname) { 
    this.firstname = firstname; 
} 

public String getLastname() { 
    return lastname; 
} 

public void setLastname(String lastname) { 
    this.lastname = lastname; 
} 

public String getAddress() { 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 

public String getCity() { 
    return city; 
} 

public void setCity(String city) { 
    this.city = city; 
} 

public String getCountry() { 
    return country; 
} 

public void setCountry(String country) { 
    this.country = country; 
} 

}

公共類 {

private int saleId; 
private Client client_id; 
private Product productId; 

public Sale() { 
}   

public int getSaleId() { 
    return saleId; 
} 

public void setSaleId(int saleId) { 
    this.saleId = saleId; 
} 

public Client getClientId() { 
    return client_id; 
} 

public void setClientId(Client client_id) { 
    this.client_id = client_id; 
} 

public Product getProductId() { 
    return productId; 
} 

public void setProductId(Product productId) { 
    this.productId = productId; 
} 

}

公共類產品 {

private int productId; 
private String productName; 
private double unitPrice; 
private String description; 
private long unitsInStock; 

public Product(){} 

public Product(int productId){ 
    this.productId=productId; 
} 

public int getProductID() { 
    return productId; 
} 

public void setProductID(int productId) { 
    this.productId = productId; 
} 

public String getProductName() { 
    return productName; 
} 

public void setProductName(String productName) { 
    this.productName = productName; 
} 

public double getUnitPrice() { 
    return unitPrice; 
} 

public void setUnitPrice(double unitPrice) { 
    this.unitPrice = unitPrice; 
} 

public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

public long getUnitsInStock() { 
    return unitsInStock; 
} 

public void setUnitsInStock(long unitsInStock) { 
    this.unitsInStock = unitsInStock; 
} 

}

的問題是在SaleDAO.java類,其中getSales()方法不會讓我來檢索值分貝。

客戶端表具有clientId(PK),名,姓,地址,城市,國家爲行。 產品 - productId參數(PK),產品名稱,單價,描述和庫存量 銷售 - saleId(PK),CLIENT_ID(FK)與客戶端(的clientId),PRODUCT_ID(FK)有關產品(productId參數)。

公共類SaleDAO {

private final Connection conn; 

public SaleDAO() { 

    conn = DBConnection.getConnection(); 
} 

public void addSale(Sale sale) { 
    try { 

     String sql = "INSERT INTO sales(saleId, client_id, product_id) VALUES (?,?,?)"; 

     PreparedStatement ps = conn.prepareStatement(sql); 

     ps.setInt(1, sale.getSaleId()); 
     ps.setInt(2, sale.getClientId().getClientID()); 
     ps.setInt(3, sale.getProductId().getProductID());    

     ps.executeUpdate(); 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

public void removeSale(int saleId) { 
    try { 

     String sql = "DELETE FROM sales WHERE saleId=?"; 

     PreparedStatement ps = conn.prepareStatement(sql); 
     ps.setInt(1, saleId); 
     ps.executeUpdate(); 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

public void editSale(Sale sale) { 
    try { 

     String sql = "UPDATE sales set client_id=? ,product_id=? where saleId=?;"; 

     PreparedStatement ps = conn.prepareStatement(sql); 


     ps.setInt(1, sale.getClientId().getClientID()); 
     ps.setInt(2, sale.getProductId().getProductID());    
     ps.setInt(3, sale.getSaleId()); 

     ps.executeUpdate(); 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

public List getSales() { 

    List saleList = new ArrayList(); 
    try { 

     String sql = "SELECT * FROM sales"; 

     PreparedStatement ps = conn.prepareStatement(sql); 

     ResultSet rs = ps.executeQuery(); 

     while (rs.next()) { 

      Sale sale = new Sale(); 

      sale.setSaleId(rs.getInt("saleId")); 
      sale.setClientId(rs.getInt("client_id")); 
      sale.setProductId(rs.getInt("product_id"); 

      saleList.add(sale); 
     } 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return saleList; 
} 

public Sale getSaleById(int saleId) { 

    Sale sale = new Sale(); 
    try { 
     String sql = "SELECT * FROM sales WHERE saleId=?"; 
     PreparedStatement ps = conn.prepareStatement(sql); 
     ps.setInt(1, saleId); 
     ResultSet rs = ps.executeQuery(); 
     if (rs.next()) { 

      sale.setSaleId(rs.getInt("saleId")); 
      sale.setClientID(rs.getInt("client_id")); 
      sale.setProductID(rs.getInt("product_id")); 

     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return sale; 
} 

}

+0

你有錯誤嗎? – Abdelhak

+0

由於來自SaleDAO的getSales()方法,當訪問viewSales.jsp時,獲得空點異常也遇到第二個問題,即無法將int轉換爲客戶端或產品。我相信這與銷售bean –

回答

0

ResultSet.getInt()返回int

sale.setClientID()預計類型爲Client的參數。

可是你打電話

sale.setClientId(rs.getInt("client_id")); 

這不可能編譯:一個int不是Client

您的銷售類別不應包含客戶端和產品的實例。就像銷售應該代表的數據庫行一樣,clientId應該是int而不是Client。或者,如果銷售應該代表銷售,其客戶及其產品,則您的SQL查詢應返回所有這些信息,而不僅僅是客戶和產品的ID。這就是連接有用的地方。效率較低的替代方案是執行3個查詢:一個檢索銷售,一個檢索客戶,第三個檢索產品。一旦所有信息都可用,您可以最終創建您的Sale對象並將其返回。

如果你這樣做,那麼請將Sale.clientId重命名爲Sale.client:該屬性表示一個完整的客戶端,而不僅僅是客戶端的ID。

+0

有關,謝謝@JBNizet,但我願意代表與銷售客戶以及該特定客戶帶來的產品/產品相關的銷售。這就是我只想使用客戶端和產品ID進行此類交易的原因。 –

+0

這句話是矛盾的。你想要一個Sale對象只包含客戶端的ID,還是包含它的ID,還有它的firstName,lastName等?如果前者,那麼Sale類不應該有一個類型爲Client的字段,而是一個int類型的字段。如果是後者,那麼你的SQL查詢應該檢索除了它的ID之外的客戶端信息。 –

+0

我只希望Sale對象包含客戶端的Id,而不是該客戶端的全部信息。同時包含該交易中包含的產品的Id。所以在這種情況下,我應該將字段類型從客戶端更改爲int?這種改變是否會影響銷售表中的FK? –

相關問題