如何分配所有的“?”使用 JDBC 模板中的对象数据?
Posted
技术标签:
【中文标题】如何分配所有的“?”使用 JDBC 模板中的对象数据?【英文标题】:How to assign all the '?' with object's data in JDBC template? 【发布时间】:2017-01-17 08:28:58 【问题描述】:我是 Spring Boot 新手。
我在spring boot中创建了on方法,请看下面的函数:
public ArrayList<ShipmentDetailsVO> getShipmentStatus(
ShipmentDetailsVO shpmntpert)
return jdbcTemplate.query("select * from SELECT_SEARCH_DETAILS(?,?,?,?,?,?,?,?)",new ResultSetExtractor<ArrayList<ShipmentDetailsVO>>()
@Override
public ArrayList<ShipmentDetailsVO> extractData(ResultSet rs) throws SQLException,
DataAccessException
shipmentDao = new ArrayList<ShipmentDetailsVO>();
while(rs.next())
shipmentDetDaoObj =new ShipmentDetailsVO();
shipmentDetDaoObj.setContractNumber(rs.getString(1));
System.out.println("hello" + rs.getString(1));
shipmentDetDaoObj.setOrderNumber(rs.getString(2));
System.out.println(rs.getString(2));
shipmentDetDaoObj.setShipmentNumber(rs.getString(3));
shipmentDetDaoObj.setShipmentControlNo(rs.getString(4));
shipmentDetDaoObj.setStatusCode(rs.getString(5));
shipmentDetDaoObj.setStatusDateStr(rs.getString(6));
shipmentDetDaoObj.setLastUpdatedtStr(rs.getString(7));
shipmentDetDaoObj.setResendFlag(false);
shipmentDetDaoObj.setSourceSystem(rs.getString(8));
shipmentDetDaoObj.setDestinationSystem(rs.getString(9));
shipmentDetDaoObj.setRfid(rs.getString(10));
shipmentDetDaoObj.setUid(rs.getString(11));
shipmentDetDaoObj.setShipmentSeqId(rs.getString(12));
shipmentDao.add(shipmentDetDaoObj);
return shipmentDao;
);
我不知道如何分配所有的“?”带有对象的(shpmntpert)数据。任何人都可以帮忙。
【问题讨论】:
你搜索过这方面的教程吗? 是的。在教程中提到,如何只绑定一个“?”与对象 []。我需要绑定所有的“?”。 【参考方案1】:来自JdbcTemplate documentation
你可以找到query
的签名之一
public <T> T query(String sql, Object[] args, ResultSetExtractor<T> rse)
throws DataAccessException
附上有趣参数的解释
sql - 要执行的 SQL 查询
args - 绑定到查询的参数
因此您可以看到该数组用于绑定值。这意味着对于像
这样的查询select * from table where name = ? and weight= ?
您需要以正确的顺序生成包含这些值的数组
new Object[]name, weight
另一个签名显示他们为 PreparedStatement 提供了一些 setter,名为 PreparedStatementSetter
。
public <T> T query(String sql,
PreparedStatementSetter pss,
ResultSetExtractor<T> rse)
throws DataAccessException
PreparedStatementSetter
接口只有一种方法可以实现
void setValues(PreparedStatement ps)
这将让你在这个 setter 中设置你想要的值。您可以将实例传递给此接口的实现或直接在代码中,如
final MyInstance m = new MyInstance();
jdbcTemplate.query("select * from table where name = ? and weight= ?",
new PreparedStatementSetter()
@Override
public void setValues(PreparedStatement ps)
ps.setString(1, m.getName);
ps.setInt(2, m.getWeight);
, myResultSetExtractor);
注意:这是对文档的快速阅读,因为我知道我从未使用过此 API。但是根据我的阅读,这应该可以正常工作。
【讨论】:
以上是关于如何分配所有的“?”使用 JDBC 模板中的对象数据?的主要内容,如果未能解决你的问题,请参考以下文章