2016-12-11 1 views
-1

Я получаю java.sql.SQLException:Получение java.sql.SQLException: Не задано значение параметра 1 при обновлении записи в сервлет с использованием MySQL

Не задано значение параметра 1 ошибки

при обновлении адреса электронной почты, который является 11-й колонкой в ​​базе данных.

Это код:

try { 
       con = DriverManager.getConnection("jdbc:mysql://localhost:3308/authenticate", "root", "root"); 
        st = con.createStatement(); 

       String query = "update custt set email =? where accno =?"; 
        PreparedStatement ps = con.prepareStatement(query); 

        ps.executeUpdate(); 
        System.out.println("updated"); 
       //st.executeUpdate(query);// create a statement 
         ps.setInt(2, acn); 
        ps.setString(11, eml); 
        //eml=rs.getString(11); // set input parameter 1 

        System.out.println("updated value"+acn); 
        System.out.println("updated value"+eml); 
        // acnn = rs.getInt(2); 
       /// session.setAttribute("Accno", acnn); 
        //session.setAttribute("C_email", eml); 
       // System.out.println("updated"); 
      } catch (SQLException ex) { 
       Logger.getLogger(UpdateDetails.class.getName()).log(Level.SEVERE, null, ex); 
      } 
+2

1) Вы вызываете 'executeUpdate()' * до * установки каких-либо параметров, поэтому почему вы путаете, когда он говорит * «Нет значения, указанного для параметра 1» *? Стекловая строка даже сообщает вам, что ошибка происходит до любого вызова 'setXxx()'. --- 2) Даже если вы переместите его до тех пор, пока вы не установите параметры, обратите внимание, что вы устанавливаете значения маркеров параметра '?', А не столбцы, а маркер электронной почты является маркером * first *, aka parameter 1 , а не параметр 11. – Andreas

ответ

1

вы выполняете инструкцию перед тем, как передать параметры. Вот как это должно выглядеть.

String query = "update custt set email =? where accno =?"; 
PreparedStatement ps = con.prepareStatement(query); 
ps.setString(1, eml); 
ps.setInt(2, acn); 
ps.executeUpdate(); 
System.out.println("updated"); 

Первый параметр всегда является индексом 1, а вторыми параметрами являются индекс 2 и т. Д., Независимо от порядка столбцов в базе данных.

+0

Было бы лучше, если бы вы могли объяснить изменения параметра «parameterIndex» от (2, 11) до (2, 1) –

+0

внутри оператора, первым параметром всегда является индекс 1, второй - 2 и т. д. Это не имеет значения, порядок отдельных столбцов в базе данных. в этом утверждении у вас есть только 2 параметра, поэтому первый - 1, а второй - 2 – KMarto

+1

@MartinKariuki. Затем отредактируйте ответ и объясните это. Это важная часть ответа, и читателям не нужно читать комментарии, чтобы получить полный ответ. --- Также обратите внимание, что комментатор 'Mincong Huang' не является автором вопроса' Hussain Shafi'. – Andreas

Смежные вопросы