Хранилище базы данных java loop и вызовите его обратно

Когда создается случайная электронная почта и хранится в базе данных mysql, она работает нормально, тогда я пытаюсь распечатать эту случайную электронную почту, но не могу. Кто-нибудь поможет мне, где я могу редактировать свой код? Без ResultSet rs=statement.executeQuery("select * from user_data"); а также System.out.println(rs.getString(1)); его работает нормально
примечание:- кто-то, пожалуйста, отредактируйте мою грамматику

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Random;

public class new_test {

    public static void main(String[] args) {
    ArrayList<String>objectsToStores = new ArrayList<>();

        Random rad = new Random();

        for (int j=1; j<=3; j++ )
        {
            objectsToStores.add("usename"+rad.nextInt()+"@gmail.com");

        }

        try {

            Class.forName("com.mysql.jdbc.Driver") ;

            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false", "root", "");

            connection.setAutoCommit(false);
            Statement statement = connection.createStatement();
            ResultSet rs=statement.executeQuery("select * from user_data");

            for (String x : objectsToStores  ) {

                statement.executeUpdate("INSERT INTO USER_DATA (email) VALUES ('" +x +"')");

            }

while(rs.next())

                System.out.println(rs.getString(1)); 

            connection.commit();
            statement.close();
            connection.close();

        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

}

1 ответ

Решение

Проблема была в том порядке, который вы использовали для выполнения запросов к БД. Я просто переместился вниз по строке.

ResultSet rs = statement.executeQuery("select * from user_data");

после

statement.executeUpdate("INSERT INTO USER_DATA (email) VALUES ('" + x + "')");

Это решает проблему, потому что когда вы выполняете UPDATE (второй запрос), ResultSet из SELECT закрывается оператором, поэтому вы не можете выполнить его итерацию и выдает ошибку

try {
    // This is not needed anymore with the new driver
    //Class.forName("com.mysql.jdbc.Driver");

    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false", "root", "");

    connection.setAutoCommit(false);
    Statement statement = connection.createStatement();

    for (String x : objectsToStores) {
        statement.executeUpdate("INSERT INTO USER_DATA (email) VALUES ('" + x + "')");
    }

    // I just moved this line down
    ResultSet rs = statement.executeQuery("select * from user_data");
    while (rs.next())
        System.out.println(rs.getString(1));

    connection.commit();
    statement.close();
    connection.close();

} catch (Exception e) {
    throw new RuntimeException(e);
}
Другие вопросы по тегам