【问题标题】:Parameter index out of range (3 > number of parameters, which is 2)参数索引超出范围(3 > 参数个数,即 2)
【发布时间】:2018-08-09 19:48:48
【问题描述】:
    public static int updateApproved(admin u){  
        int status=0;  
        try{  
            Connection con=getConnection();  
            PreparedStatement ps=con.prepareStatement("update admission set status=? where admiss_id=?");  

            ps.setString(1,u.getStatus());
            ps.setInt(2,u.getAdmiss_id());  


            status=ps.executeUpdate();

            PreparedStatement ps2=con.prepareStatement("insert into patient(username,password,email,sex,level,fullname,age,bday,blood,address,vaccines,fam_his,surgery,medicine_taken) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)");  
            ps.setString(1,u.getUsername());  
            ps.setString(2,u.getPassword());  
            ps.setString(3,u.getEmail());  
            ps.setString(4,u.getSex());  
            ps.setInt(5,u.getLevel());
            ps.setString(6,u.getFullname());
            ps.setInt(7,u.getAge());
            ps.setString(8,u.getBday());
            ps.setString(9,u.getAddress());
            ps.setString(10,u.getBlood());
            ps.setString(11,u.getVaccines());
            ps.setString(12,u.getFam_his());
            ps.setString(13,u.getSurgery());
            ps.setString(14,u.getMedicine_taken());
            status=ps2.executeUpdate();
        }catch(Exception e){System.out.println(e);}  
        return status;  
    }  

java.sql.SQLException:参数索引超出范围(3 > 参数个数,即 2)。为什么这总是错误?我已经计算了参数的范围,但我仍然得到那个错误。

【问题讨论】:

  • 请仔细阅读您的代码,ps != ps2...

标签: java jdbc sqlexception


【解决方案1】:
PreparedStatement ps2=con.prepareStatement("insert into patient(username,password,email,sex,level,fullname,age,bday,blood,address,vaccines,fam_his,surgery,medicine_taken) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)");  
ps.setString(1,u.getUsername());  // ps has this
ps.setString(2,u.getPassword());  // ps has this
ps.setString(3,u.getEmail());  // ps does not have this, it only has 2 ?'s in it, so it explodes

您正在制作PreparedStatement ps2,但您的setStrings 都在ps...您需要更新那些以使用ps2

【讨论】:

  • 谢谢你,我们还是学生1个月系统T_T哈哈哈非常感谢你,它成功了^_^
【解决方案2】:

问题是您误用了变量psps2

由于您在上面创建了一个PreparedStatement 变量,您可以再次使用它而无需创建新变量。

ps = con.prepareStatement("insert into patient
(username, password, email, sex,
level, fullname, age, bday, blood, address, vaccines, fam_his, surgery, medicine_taken)
values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多