如何在DAO中传递对象字段?

时间:2015-06-26 10:58:21

标签: java sql jdbc dao

我为我的实体创建了DAO。现在我遇到了一个问题:我需要在某些方法中传递另一个对象的字段。例如:

@Override
public void updateById(PriceTrack priceTrack, int id) throws DBException {
    PreparedStatement ps = null;
    try {
        conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
        conn.setAutoCommit(false);
        ps = conn.prepareStatement(UPDATE_BY_ID);
        ps.setInt(1, priceTrack.getOldPrice());
        ps.setInt(2, priceTrack.getNewPrice());
        ps.setDate(3, new java.sql.Date(priceTrack.getLastUpdatedPrice().getTime()));
        // todo - pass Appartment id
        ps.setObject(4, new Apartment());
        ps.executeUpdate();
        conn.commit();
    } catch (SQLException e) {
        JdbcUtils.rollbackQuitely(conn);
        throw new DBException("Cannot execute SQL = '" + UPDATE_BY_ID + "'", e);
    } finally {
        JdbcUtils.closeQuitely(ps);
        JdbcUtils.closeQuitely(conn);
    }
}

这里我需要传递相应的Aparment_id值。创建new Apartment()是错误的。

UPDATE_BY_ID的内容:

    public static final String UPDATE_BY_ID = "UPDATE price_track SET old_price=?, new_price=?, lastupdated_price=?, apartment_id=?";

最好的方法是什么?

这也是显示连接的图表。 enter image description here

3 个答案:

答案 0 :(得分:1)

如果您对越来越多的论点感到担忧,可能会有解决方案

  1. 传递一张地图,您可以根据需要以键值对的形式传递所需的参数数量
  2. 当传递的参数很多时,
  3. 传递一个对象,它基本上是表单的一部分,它与一个类的字段相关并以填充对象的形式提供给你
  4. 您选择哪种情况取决于您获取数据的方式以及将来获取更多字段的预期

答案 1 :(得分:1)

如果您只想更新old_pricenew_pricelastupdated_price,则不一定更新aparment_id,因为它是外键。假设它不会改变是合乎逻辑的。您可以从查询中删除aparment_id

UPDATE price_track SET old_price=?, new_price=?, lastupdated_price=?

并从代码中正确删除ps.setObject(4, new Apartment());

JDBC需要手动配置,它不会自动执行任何操作。

答案 2 :(得分:1)

更好的方法是创建对象初始化它并将其传递给DAO 为此使用pojo类

class PriceTrack{
           int id;
           doulbe price;
          //and relation ship between price and apartment 1:1 or 1:n
            Set apartment=new HashSet(0);
         //getter and setter
     }

class Apartment{
           int id;
           int room;
           String description;
         //and relation ship between apartment and price 1:1 or 1:n
      }

public static void main(String s[])
{
   PriceTrack priceTrack=new PriceTrack();
  priceTrack.setId(23);
   priceTrack.setPrice(2389);
  Apartment a=new Apartment();
  a.setRoom(3);
  a.setDescription("good rooms");
  Set s=new HashSet();
  s.add(a);
  priceTrack.setApartment(s);
  //now send It to the DAO method
  DAO.updateById(priceTrack);
}