我有以下方法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
并传递给接受整数的存储过程。
调试lstIds的值时,“52512,85822”两个pricingTierId's
以逗号(,)分隔。
在将pricingTierId
传递给存储过程之前,我写了以下内容:
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));
,那么我得到 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
。
答案 0 :(得分:1)
如何将它从分割中创建的数组中取出然后循环:
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.