Получение результата команды sql в java

мне нужно получить последний идентификатор, введенный в мою базу данных, это AUTO_INCREMENT, поэтому я сделал это

 String Var = "SELECT MAX(id) FROM goupe ; ";
     ResultSet vari=st.executeQuery(Var);
     while(vari.next()){
     nombre = vari.getInt("id");}
     String sql = "INSERT INTO Student(name,famillyname,email,password,module,speciality,card,id_goupe)VALUES('"+name+"','"+familly+"','"+email+"','"+pass+"','"+module+"','"+specialite+"','"+card+"','"+nombre+"');";
                st.execute(sql);

но у меня была эта проблема "Идентификатор столбца" не найден. Итак, что мне делать, чтобы все было правильно.

Дайте название вашему результату, например SELECT MAX(id) AS maxid FROM goupe ..vari.getInt("maxid")

Arnaud 08.06.2018 16:22

В качестве альтернативы вы можете выполнить vari.getInt(1), чтобы получить значение первого столбца результата.

SurfMan 08.06.2018 16:24

спасибо @Berger, это сработало

Tima Fatimz 08.06.2018 16:31

спасибо @SurfMan, который тоже сработал

Tima Fatimz 08.06.2018 16:34

ob xkcd

Chris Parker 08.06.2018 16:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Когда вы выполняете запрос SELECT MAX(id) FROM goupe;, то в возвращаемой таблице имя столбца больше не остается как id.

Итак, лучший подход - указать имя для столбца, как показано ниже:

SELECT MAX(id) AS maxid FROM goupe;

Затем вы можете получить значение, используя:

vari.getInt("maxid") 
Ответ принят как подходящий

Я должен сказать, что есть несколько действительно простых вещей, которые вы можете сделать, чтобы значительно улучшить свой код.

  • Если ваш последний идентификатор сгенерирован где-то еще, вставьте запрос прямо в оператор, чтобы вам не приходилось его получать. Это снизит риск состояния гонки.
  • Используйте PreparedStatements. Позвольте мне задать вам вопрос: как вы думаете, что произойдет, если имя одного из ваших пользователей будет О'Райан?

Поскольку ваш код - это просто фрагмент, я также предоставлю только фрагмент:

int index = 1;
String sql = "INSERT INTO Student(name,famillyname,email,password,module,speciality,card,id_goupe)" + 
    "VALUES(?,?,?,?,?,?,?,(SELECT MAX(id) FROM goupe));";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(index++, name);
ps.setString(index++, familyname);
ps.setString(index++, email);
ps.setString(index++, password);
ps.setString(index++, module);
ps.setString(index++, speciality);
ps.setString(index++, card);
int rows = ps.executeUpdate();
if (rows == 1) {
    System.out.println("Successfully inserted row");
}

Другие вопросы по теме