Ускорить/Оптимизировать

223
16 июля 2018, 02:40

Необходимо получить все данные игрока из базы данных, для проверки насколько это быстро произойдет я создал цикл из 100 юзеров.

long start = System.currentTimeMillis();
    System.out.println("Начал:");
    for (int i = 1; i < 100; i++) {
        System.out.println("user_" + i);
        RPlayer p = new RPlayer("user_" + i);
        p.getInfractions();//Получение значений из базы данных
        p.getLocalization();//Получение значений из базы данных
        p.getGroup();//Получение значений из базы данных
        p.getAuth();//Получение значений из базы данных
        p.getLevel();//Получение значений из базы данных
        p.getKarma();//Получение значений из базы данных
        p.getCoins();//Получение значений из базы данных
    }
    System.out.println("Заняло:" + (System.currentTimeMillis() - start));

Результат этого кода: https://hastebin.com/ibiwapiwuv.css

Время выполнения цикла заняло 23412 миллисекунд.

Во всех выше методах я использовал вот такую конструкцию:

public class RLevel {
private String player;
private Integer level;
private Integer xp;
private Statement statement;
public RLevel(RPlayer rPlayer) {
    this.player = rPlayer.getName();
    try {
        this.statement = Core.getInstance().getSqlConnector().getConnection().createStatement();
        ResultSet result = this.statement.executeQuery("SELECT * FROM level WHERE user = '" + this.player + "'");
        if (result.next()) {
            this.level = result.getInt("level");
            this.xp = result.getInt("xp");
        } else {
            this.level = 0;
            this.xp = 0;
            insert();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
private void insert() {
    try {
        statement.executeUpdate("INSERT INTO level VALUES (user, level, xp) ON DUPLICATE KEY UPDATE user='" + this.player + "', level=" + this.level + ", xp=" + this.xp);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
private void update() {
    try {
        this.statement.executeUpdate("UPDATE level SET level='" + this.level + ", xp=" + this.xp + "' WHERE user='" + this.player + "'");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
public Integer getLevel() {
    return level;
}
public void setLevel(Integer count) {
    this.level = count;
    update();
}
public void levelUp() {
    level++;
    update();
}
public Integer getXp() {
    return this.xp;
}
public void setXp(Integer count) {
    this.xp = count;
    update();
}
public void addXp(Integer count) {
    this.xp = + count;
    update();
}

}

В чем моя ошибка? Почему запрос бд занимает такое большое количество времени?

READ ALSO
Servlet отправка файла клиенту

Servlet отправка файла клиенту

Мне нужно реализовать передачу файла с сервера на клиентФайл выбирается сервером и отправляется клиенту

210
Ошибка в java коде. (андроид приложение)

Ошибка в java коде. (андроид приложение)

В одной из папок приложения под андроид есть файл (а точнее несколько файлов) в одной и той-же ошибкой- "Unknown entity 'R'"

162
Как получить результат, при выполнении JUnit?

Как получить результат, при выполнении JUnit?

Код который нужнно протестировать

201