Как получить значение из БД SQL? java

476
16 июля 2017, 10:47
 System.out.print("Введите имя: "); //начинаем регистрацию
            name = reader.readLine();
            System.out.print("Введите фамилию: ");
            sername = reader.readLine();
            System.out.print("Введите класс: ");
            grade = Integer.parseInt(reader.readLine());
            System.out.print("Введите букву класса: ");
            gradeLatter = reader.readLine();
            String login = sername +  name.toUpperCase().charAt( 0 )+grade;
            String loginQuery = "Select login from children.childrenInfo where name = ";
            //делаем запрос в БД с данными пользователя
            PreparedStatement ps=connection.prepareStatement( "INSERT INTO children.childreninfo" +
                    " (name,sername,grade,gradeLatter,login) VALUES (?,?,?,?,?)" );
            ps.setString( 1, name );
            ps.setString( 2, sername );
            ps.setInt( 3, grade );
            ps.setString( 4,gradeLatter );
            ps.setString( 5,login );
            ps.executeUpdate();

Нужно реализовать запрос так, что бы ответом был логин только что зарегистрированного пользователя.
Я, скажем ввожу свои данные, и в конце после занесения в БД, мне выводиться логин.

Answer 1

Если вам нужно получить логин пользователя по его id вы можете это сделать так:

select login from children where id = 100500

этот запрос вернет логин для юзера с id = 100500.

Я смотрю что id у вас судя по всему генерируется автоматический, для этого нужно будет внести еще некоторые изменения в код.

PreparedStatement ps = connection.prepareStatement("INSERT INTO children.childreninfo" +
            " (name,sername,grade,gradeLatter,login) VALUES (?,?,?,?,?)", Statement.RETURN_GENERATED_KEYS);

    int affectedRows = statement.executeUpdate();
    if (affectedRows == 0) {
        throw new SQLException("Ошибка");
    }
    try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
        if (generatedKeys.next()) {
            long id = generatedKeys.getLong(1);
            //делаем второй запрос что  бы узнать логин
            Statement stmt = conn.createStatement();
            String sql = "select login from children where id = " + id;
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                String registeredUserLogin = rs.getString("login");
                // принтим в консоль логин, только что зарегистрированного пользователя
                System.out.println("User registered with login: " + registeredUserLogin);
            }
        } else {
            throw new SQLException("Ошибка");
        }
    }
Answer 2

Самый простой вариант - это использовать jdbc. Пример с его использованием будет выглядеть так:

//зависит от версии драйвера, если используется относительно "свежий", 
//то эту строку можно пропустить
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("<url>", "<login>", "<password>");
Statement stmt = conn.createStatement();
String sql = "SELECT 1";
ResultSet rs = stmt.executeQuery(sql);

Подробнее можно почитать здесь

READ ALSO
Проблемный многопоточный код

Проблемный многопоточный код

У меня есть такой участок кода:

201
Маcштабирование текстуры в PolygonRegion

Маcштабирование текстуры в PolygonRegion

Суть проблемы такова: имеется polygonRegion в котором содержится данная текстура (рис1)

206
Выравнивание camel routes на Java DSL в intellij-idea

Выравнивание camel routes на Java DSL в intellij-idea

Поискал по интернетам и не нашёл никаких плагинов для intellij-idea которые будут выравнивать camel rout'ы в "правильную" иерархию, как например делает...

248