• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java mysql - too many connections

0 głosów
209 wizyt
pytanie zadane 22 czerwca 2018 w Java przez kingkushlee Gaduła (3,960 p.)
zmienione kategorie 22 czerwca 2018 przez Arkadiusz Waluk

Witam, mam taki kod: 

package com.chumanista.youtube;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

public class MysqlManager {
	
	private static Connection con;
	
	public static void checkTable() {
		openConnection();
		
		String tbName = UserDataCollector.getPlugin().getConfig().getString("mysqlTableName");
		
		StringBuilder sb = new StringBuilder();
		sb.append("create table if not exists ");
		sb.append(tbName);
		sb.append("(");
		sb.append("uuid varchar(100) not null,");
		sb.append("name varchar(50) not null,");
		sb.append("ip varchar(50) not null,");
		sb.append("money double not null,");
		sb.append("primary key (uuid));");
		
		try {
			con.createStatement().executeUpdate(sb.toString());
		} catch (SQLException e) {

			e.printStackTrace();
		}
		
		closeConnection();
	}
	
	public static synchronized void openConnection() {
		if (!isConnected()) {
			try {
				
				String host = UserDataCollector.getPlugin().getConfig().getString("mysqlHost");
				String user = UserDataCollector.getPlugin().getConfig().getString("mysqlUser");
				String pass = UserDataCollector.getPlugin().getConfig().getString("mysqlPass");
				String dbname = UserDataCollector.getPlugin().getConfig().getString("mysqlDatabaseName");
				String port = UserDataCollector.getPlugin().getConfig().getString("mysqlPort");
				
				con = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + dbname + "?user=" + user + "&password=" + pass);
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static synchronized void closeConnection() {
		if (isConnected()) {
			try {
				con.close();
			} catch (SQLException e) {
				
			}
		}
	}
	
	public static void saveData(Player p) {
			openConnection();
			
			checkTable();
			String tbName = UserDataCollector.getPlugin().getConfig().getString("mysqlTableName");
			StringBuilder sb = new StringBuilder();
			sb.append("select * from `" + tbName + "` where name=" + '"' + p.getName() + '"');
			
			try {
				ResultSet rs = con.createStatement().executeQuery(sb.toString());
				if (!rs.next()) {
					
					StringBuilder insert = new StringBuilder();
					
					insert.append("insert into `");
					insert.append(tbName);
					insert.append("` values(");
					insert.append('"');
					insert.append(p.getUniqueId().toString());
					insert.append('"');
					insert.append(", ");
					insert.append('"');
					insert.append(p.getName());
					insert.append('"');
					insert.append(", ");
					insert.append('"');
					insert.append(p.getAddress().getAddress().toString().replace("/", ""));
					insert.append('"');
					insert.append(", ");
					insert.append(UserDataCollector.getEconomy().getBalance(p.getName()));
					insert.append(")");
					
					con.createStatement().executeUpdate(insert.toString());
					closeConnection();
					p.sendMessage(ChatColor.GRAY + "" + ChatColor.BOLD + "[" + ChatColor.AQUA + "UserDataCollector" + ChatColor.GRAY + "] " + ChatColor.GOLD + "Twoje dane zostaly zapisanie!");
					return;
				}
				
				StringBuilder update = new StringBuilder();
				
				update.append("update `");
				update.append(tbName);
				update.append("` set uuid=");
				update.append('"');
				update.append(p.getUniqueId().toString());
				update.append('"');
				update.append(", name=");
				update.append('"');
				update.append(p.getName());
				update.append('"');
				update.append(", ");
				update.append("ip=");
				update.append('"');
				update.append(p.getAddress().getAddress().toString().replace("/", ""));
				update.append('"');
				update.append(", ");
				update.append("money=");
				update.append(UserDataCollector.getEconomy().getBalance(p.getName()));
				update.append(" where name=");
				update.append('"');
				update.append(p.getName());
				update.append('"');
				
				con.createStatement().executeUpdate(update.toString());
				closeConnection();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			closeConnection();
	}
	
	public static void loadData() {
		
	}
	
	public static Connection getCon() {
		return con;
	}
	
	public static boolean isConnected() {
		
		if(con == null) return false;
		try {
			if(con.isClosed()) return false;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return false;
	}
	
}

Jak zmodyfikować go tak, abym mógł co sekundę wysyłać połączenie mysql jednocześnie nie mając błędu o too many connections?

1
komentarz 22 czerwca 2018 przez mbabane Szeryf (79,260 p.)

1 odpowiedź

+1 głos
odpowiedź 23 czerwca 2018 przez jeremus Maniak (59,720 p.)
czy Twoja funkcja isConnected() zwraca kiedyś   true ?, bo z kodu to nie wynika

Podobne pytania

0 głosów
1 odpowiedź 185 wizyt
0 głosów
1 odpowiedź 897 wizyt
pytanie zadane 7 marca 2023 w C i C++ przez scared Początkujący (260 p.)
0 głosów
1 odpowiedź 693 wizyt

93,720 zapytań

142,641 odpowiedzi

323,265 komentarzy

63,269 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...