如何从Java中使用外键的表中检索值?

时间:2016-04-09 14:01:48

标签: java mysql spring spring-mvc

我对Java和Spring有点新鲜,我在尝试完成我所关注的课程的作业时遇到了问题。

我需要做的是在将MV应用程序连接到MySQL数据库的同时在Spring MVC中创建一个在线商店 - 第一个带有客户端的JSP,我可以选择显示,添加,删除和修改客户端 - 具有产品的第二个JSP具有相同的可用选项(显示,添加,删除和修改) - 以及带有销售额的最后一个JSP 或Transactions。

模特/豆类

公共类客户 {

var timing = [1000, 2000, 500, 300, 800],
  timeouts

function runinterval() {
  timeouts = setTimeout(function() {
    clearTimeout(timeouts);
    timing.shift();
    $(".imgholder").css("background-image", "url(https://unsplash.it/100/100/?random&i=" + new Date().getTime() + ")")
    if (timing.length != 0)
      runinterval();
  }, timing[0])
}
runinterval();

}

公共课促销 {

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;
} 

}

问题出在SaleDAO.java类中,其中getSales()方法不允许我从db中检索值。

clients 表具有clientId(PK),名字,姓氏,地址,城市,国家/地区作为行。 产品 - productId(PK),productName,unitPrice,description和unitsInStock 销售 - 与客户(clientId)相关的saleId(PK),client_id(FK),与产品相关的product_id(FK)(productId)。

公共类 SaleDAO {

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;
}

}

1 个答案:

答案 0 :(得分:0)

ResultSet.getInt()会返回int

sale.setClientID()期望参数类型为Client

然而你正在打电话

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

那可能无法编译:{{1​​}}不是int

您的销售类不应包含客户和产品的实例。就像Sale应该代表的数据库行一样,clientId应该是Client,而不是int

或者,如果销售应该代表销售,其客户及其产品,那么您的SQL查询应该返回所有这些信息,而不仅仅是客户端和产品的ID。连接有用的地方。一种效率较低的替代方案是执行3个查询:一个检索销售,另一个检索客户端,第三个检索产品。一旦所有信息都可用,您最终可以创建Sale对象并将其返回。

如果你这样做,那么请将Sale.clientId重命名为Sale.client:该属性代表一个完整的客户端,而不仅仅是客户端的ID。