Индекс параметра вне допустимого диапазона (3 › количество параметров, равное 2)

    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). Почему это всегда ошибка? у меня есть счетчик диапазонов параметра, но я все равно получаю эту ошибку.


person Ararix    schedule 01.03.2018    source источник
comment
Пожалуйста, внимательно прочитайте свой код, ps != ps2...   -  person Mark Rotteveel    schedule 01.03.2018


Ответы (2)


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, но ваши setString все на ps... Вам нужно обновить их, чтобы использовать ps2

person corsiKa    schedule 01.03.2018
comment
Спасибо большое, мы все еще студенты, система 1 месяц T_T хахаха большое спасибо, это сработало ^_^ - person Ararix; 01.03.2018

Проблема в том, что вы неправильно использовали переменные ps и ps2.

Поскольку вы создали переменную PreparedStatement выше, вы можете использовать ее снова, не создавая новую.

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