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

Java mysql - too many connections

Object Storage Arubacloud
0 głosów
105 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,280 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ź 98 wizyt
0 głosów
1 odpowiedź 294 wizyt
pytanie zadane 7 marca 2023 w C i C++ przez scared Początkujący (260 p.)
0 głosów
1 odpowiedź 464 wizyt

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...