我有以下方法applyIncentives需要ListlstIds
public void applyIncentives(List<String> lstIds) throws Exception {
Session session = null;
Transaction tx = null;
String pricingTierId = null;
if (lstIds != null && lstIds.size() > 0) {
for (String lstpricingTierIds : lstIds) {
pricingTierId = lstpricingTierIds.trim();
}
}
try {
session = HibernateSessionFactory.getSession();
tx = session.beginTransaction();
SQLQuery query = session.createSQLQuery("select * from customer.apply_incentives(:pricingTierId)");
query.setString("pricingTierId", pricingTierId);
query.list();
tx.commit();
approveFlag = true;
}
catch (Exception ex) {
log.error("Exception", ex);
}
finally {
if (session != null)
session.close();
}
return approveFlag;
}
我从lstIds传递
pricingTierId
并传递到接受Integer的存储过程。调试时,lstIds的值为“ 52512,85822”,两个
pricingTierId's
用逗号(,)分隔。在将
pricingTierId
传递到存储的Proc之前,我已经编写了以下内容:String pricingTierId = null ;
if (lstIds != null && lstIds.size() > 0) {
for (String lstpricingTierIds : lstIds) {
pricingTierId = lstpricingTierIds.trim();
}
}
我的问题:
如何用逗号分隔
pricingTierId
(,)?由于我要传递列表
List<String> lstIds
,因此不能直接使用pricingTierId = lstpricingTierIds.trim().split(",")
。如果我将
String pricingTierId = null
更改为String[] pricingTierId
我在
query.setString("pricingTierId", pricingTierId);
时出错如果我使用
query.setInteger("pricingTierId", Integer.parseInt(pricingTierId));
,则由于逗号(,)被传递给存储的proc,所以我得到Numberformat Exception。按照建议添加了代码
List<String> pricingTierId = null;
if (lstIds != null && lstIds.size() > 0) {
for(String lstpricingTierIds : lstIds) {
pricingTierId = Arrays.asList(lstpricingTierIds.trim().split(","));
}
}
但是我在以下位置得到错误:
query.setString("pricingTierId", pricingTierId);
setString不能用于
String[]
而且我不能使用
query.setInteger("pricingTierId", Integer.parseInt(pricingTierId));
就像说的那样,将
pricingTierId
的类型更改为String
。 最佳答案
如何将其从拆分创建的数组中取出然后循环:
String[] pricingTierIdArray = lstpricingTierIds.trim().split(",");
for(String s : pricingTierIdArray ) {
query.setInteger("pricingTierId", Integer.parseInt(s));
}
setInteger()
方法将覆盖先前的值。除非您更改查询,否则只能设置一个ID。或者只是:
String pricingTierIdArray = lstpricingTierIds.trim().split(",")[0]; //This depends on whether you need both values or not.