为了账号安全,请及时绑定邮箱和手机立即绑定

关于Parameter index out of range (0 < 1 ).异常,通常是哪里出错了?

关于Parameter index out of range (0 < 1 ).异常,通常是哪里出错了?

Change___ 2016-06-20 10:50:01
public int doAdd(HeroBean hero) throws Exception {  int rs=0;    List list=new ArrayList();   StringBuilder sb1=new StringBuilder("insert into hero(name,");   StringBuilder sb2=new StringBuilder("values(?,");   if(hero.getName()!=null&&hero.getName().length()>0){   list.add(hero.getName());      }   if(hero.getSex()!=null){   sb1.append("sex,");   sb2.append("?,");   list.add(hero.getSex());   }   if(hero.getType1()!=null){   sb1.append("type1,");   sb2.append("?,");   list.add(hero.getType1());   }  sb1.deleteCharAt(sb1.length()-1);  sb2.deleteCharAt(sb2.length()-1);  sb2.append(")");  sb1.append(")");  String sql=sb1.append(sb2).toString();    try{  PreparedStatement psmt=null;  conn=db.getConn();  psmt=conn.prepareStatement(sql);  for(int i=0;i<list.size();i++){  psmt.setObject(i,list.get(i));  }   rs=psmt.executeUpdate();  psmt.close();    }catch(Exception e){  throw e;  }finally{  if(conn!=null){  conn.close();  }      } return rs;}这是我的代码,检查不出哪里错了,是JDBC连接的问题。
查看完整描述

1 回答

已采纳
?
绿洲仙人球

TA贡献39条经验 获得超47个赞

看提示应该是调用越界问题,分析代码的逻辑,如果传入的hero对象的值都为空,那么sql语句为

insert into hero(name) values(?)

但是list中并没有name的值,导致?没有赋值,执行的时候肯定会报错啦

建议修改代码逻辑,动态的去拼接sql中的字段值和value值,insert into hero 可以作为静态的,最后在拼接


查看完整回答
1 反对 回复 2016-06-20
  • Change___
    Change___
    我在测试类里面给name,sex,type1都赋了值,用hero.setName("***");赋的值,是逻辑有问题吗?
  • 绿洲仙人球
    绿洲仙人球
    建议你把最后的sql和list都打印出来,应该是?和赋值的个数不匹配,这样一对比就明显了
  • 1 回答
  • 0 关注
  • 2052 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信