Вопрос MySQL, Как убрать ошибку

AyyLean

Разработчик
Пользователь
Сообщения
50
Веб-сайт
zenmc.ru
Вот ошибка: MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections".
Я не понимаю почему она выдается, потому что я где то все время вызываю эти методы? или не
С mySQL работаю в первый раз.

Java:
public void addPlayer(Player player) throws SQLException {
        Connection connection = getConnection();
        Statement statement = (Statement) connection.createStatement();
       
        statement.executeUpdate(String.format("INSERT INTO player_info (name, level, xp) VALUES ('%s', '%d', '%d')", player.getName(), PlayerLevels.getLevel(player), PlayerLevels.getExp(player)));  
       
        connection.close();
        statement.close();
    }

Java:
package com.vk.bestrax;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

public class SQLDatabase {
    String url;
    String user;
    String password;
   
    public SQLDatabase(neverAPI plugin) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
        FileConfiguration config = plugin.getConfig();
        String host = config.getString("mySQL.host");
        int port = config.getInt("mySQL.port");
        String user = config.getString("mySQL.user");
        String dbname = config.getString("mySQL.dbname");
        String password = config.getString("mySQL.password");
        url = "jdbc:mysql://" + host + ":" + port + "/" + dbname;
        this.user = user;
        this.password = password;
        Connection connection = null;
       
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            connection = getConnection();  
        } catch (Exception e) {
            System.out.println("NeverAPI | SQLDatabase.java, Class.forName!");
            System.out.println("NeverAPI | SQLDatabase.java, Class.forName!");
            System.out.println("NeverAPI | SQLDatabase.java, Class.forName!");
            System.out.println("NeverAPI | SQLDatabase.java, Class.forName!");
            System.out.println("NeverAPI | SQLDatabase.java, Class.forName!");
            System.out.println("NeverAPI | SQLDatabase.java, Class.forName!");
            System.out.println("NeverAPI | SQLDatabase.java, Class.forName!");
            System.out.println("NeverAPI | SQLDatabase.java, Class.forName!");
        }
       
        Statement statement = (Statement) connection.createStatement();
       
        statement.executeUpdate("CREATE TABLE IF NOT EXISTS player_info (name TEXT, level LONG, xp LONG)");
       
        statement.close();
        connection.close();
    }
   
    public Connection getConnection() throws SQLException {
        if (user != null) {
            return (Connection) DriverManager.getConnection(url, user, password);
        }
        return null;
    }
   
    public void saveLevel() throws SQLException {
        Connection connection = getConnection();
        Statement statement = (Statement) connection.createStatement();
        HashMap<Player, Long> players = PlayerLevels.getPlayers();
       
        for (Player player : Bukkit.getOnlinePlayers()) {
            ResultSet RS = statement.executeQuery("SELECT COUNT(*) AS total FROM player_info where name ='" + player.getName() + "'");
            try {
                while (RS.next()) {
                    if( RS.getInt("total") > 0 ) {
                        PlayerLevels.addPlayer(player, RS.getLong("xp"));
                        statement.executeUpdate(String.format("UPDATE player_info set level=%d, xp=%d WHERE name='%s'", PlayerLevels.getLevel(player), PlayerLevels.getExp(player),  player.getName()));  
                    } else {
                        addPlayer(player);
                        PlayerLevels.addPlayer(player, 0);
                    }
                }
            } catch (SQLException e) {
                statement.executeUpdate(String.format("UPDATE player_info set level=%d, xp=%d WHERE name='%s'", PlayerLevels.getLevel(player), PlayerLevels.getExp(player),  player.getName()));          
            } finally {
                RS.close();
                connection.close();
                statement.close();
            }
        }
    }
   
    public void addPlayer(Player player) throws SQLException {
        Connection connection = getConnection();
        Statement statement = (Statement) connection.createStatement();
       
        statement.executeUpdate(String.format("INSERT INTO player_info (name, level, xp) VALUES ('%s', '%d', '%d')", player.getName(), PlayerLevels.getLevel(player), PlayerLevels.getExp(player)));  
       
        connection.close();
        statement.close();
    }
}

Код:
[14:27:39 INFO]: sleinexxx[/127.0.0.1:65382] logged in with entity id 0 at ([world]-248.22091713899914, 56.0, -1042.888604451264)
[14:27:42 WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
[14:27:42 WARN]:        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[14:27:42 WARN]:        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
[14:27:42 WARN]:        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
[14:27:42 WARN]:        at java.lang.reflect.Constructor.newInstance(Unknown Source)
[14:27:42 WARN]:        at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
[14:27:42 WARN]:        at com.mysql.jdbc.Util.getInstance(Util.java:382)
[14:27:42 WARN]:        at com.vk.bestrax.SQLDatabase.addPlayer(SQLDatabase.java:92)
[14:27:42 WARN]:        at com.vk.bestrax.SQLDatabase.saveLevel(SQLDatabase.java:74)
[14:27:42 WARN]:        at com.vk.bestrax.neverAPI.savePlayers(neverAPI.java:70)
[14:27:42 WARN]:        at com.vk.bestrax.DataSaver.run(DataSaver.java:15)
[14:27:42 WARN]:        at java.lang.Thread.run(Unknown Source)
>
 
Назад
Сверху Снизу