Ir para conteúdo

[MYSQL] ajuda!


Naftalindo

Posts Recomendados

eae galera, eu estou fazendo meu servidor, fiz um plugin né, só flodava console de erro

por causa que uso muitas conexões

se alguem poder me enviar uma classe mysql sem lagar

e como usar tipo

 public void setarPrefs(final String nome, final int tell, final int coins, final int tpa, final int vanish) throws SQLException {
        final Connection con = this.getConnection();
        final String awe = String.valueOf(String.valueOf(tell)) + ";" + coins + ";" + tpa + ";" + vanish;
        try {
            final PreparedStatement ps = con.prepareStatement("UPDATE contas SET prefs = ? WHERE player = ?;");
            ps.setString(1, awe);
            ps.setString(2, nome.toLowerCase());
            ps.executeUpdate();
        }
        finally {
            if (con != null) {
                con.close();
            }
        }
        if (con != null) {
            con.close();
        }
    }
 
 
Eu estava utilizando esse finally a cima, não resolveu!! estou recodando todo o plugin :v triste mais tmj <3
Link para o comentário
Compartilhar em outros sites

Voce nao precisa fechar a conexao toda vez que acessar o banco de dados... Isso na verdade é um mal uso, voce pode utilizar a mesma conexao para executar diversos querys! 

 

Pelo oq eu to vendo, sempre q vc vai ATUALIZAR um dado, voce fecha a conexao toda vez!

Link para o comentário
Compartilhar em outros sites

Voce nao precisa fechar a conexao toda vez que acessar o banco de dados... Isso na verdade é um mal uso, voce pode utilizar a mesma conexao para executar diversos querys! 

 

Pelo oq eu to vendo, sempre q vc vai ATUALIZAR um dado, voce fecha a conexao toda vez!

O problema, é que tem 10 plugins fazendo conexão no task de 1 segundo.

 

 

Mais se você conseguir resolver, ficarei grato.

Editado por Naftalindo
Link para o comentário
Compartilhar em outros sites

O problema, é que tem 10 plugins fazendo conexão no task de 1 segundo.

 

 

Mais se você conseguir resolver, ficarei grato.

Voce fica atualizando isso tudo de um em um segundo? Isso é mais que obvio que vai lagar!

Link para o comentário
Compartilhar em outros sites

Claro!

 

Voce pode salvar todas essas configuracoes dos players em objetos, pelo oq eu to vendo, vc esta armazenando algumas informacoes dos players, crie um objeto dessa forma: (digamos que esse objeto vai se chamar Preferencias)


public class Preferencias {

	private String name;
	private boolean tell;
	private int coins;
	private boolean tpa;
	private boolean vanish;
	
	public Preferencias(String nome, boolean tel, int coin, boolean tp, boolean vanis) {
		name = nome;
		tell = tel;
		coins = coin;
		tpa = tp;
		vanish = vanis;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public boolean isTell() {
		return tell;
	}

	public void setTell(boolean tell) {
		this.tell = tell;
	}

	public int getCoins() {
		return coins;
	}

	public void setCoins(int coins) {
		this.coins = coins;
	}

	public boolean isTpa() {
		return tpa;
	}

	public void setTpa(boolean tpa) {
		this.tpa = tpa;
	}

	public boolean isVanish() {
		return vanish;
	}

	public void setVanish(boolean vanish) {
		this.vanish = vanish;
	}
	
}

Ai voce salva esse objeto em cache, é um esqueminha bem loco, tipo assim:

	public static ArrayList<Preferencias> preferencias_cached = new ArrayList<>();
	
	@EventHandler
	private void aoEntrar(PlayerJoinEvent e) {
		Preferencias pref = new Preferencias(e.getPlayer().getName(), false, 55, true, false);
		preferencias_cached.add(pref);
	}

Ai voce cria uma task, de 5 em 5 minutos, pra atualizar as informacoes do "preferencias_cached" direto no mysql, assim voce reduz o numero de conexoes e de tasks ;)

 

 

 

 

@EDIT: Ai, se voce precisar consultar alguma coisa no mysql, e ja estiver o "preferencias_cached" salvo no arraylist, nao vai precisar consultar o mysql, so vai precisar consultar a variavel ;)

Editado por GuiHSilva
Link para o comentário
Compartilhar em outros sites

Claro!

 

Voce pode salvar todas essas configuracoes dos players em objetos, pelo oq eu to vendo, vc esta armazenando algumas informacoes dos players, crie um objeto dessa forma: (digamos que esse objeto vai se chamar Preferencias)

public class Preferencias {

	private String name;
	private boolean tell;
	private int coins;
	private boolean tpa;
	private boolean vanish;
	
	public Preferencias(String nome, boolean tel, int coin, boolean tp, boolean vanis) {
		name = nome;
		tell = tel;
		coins = coin;
		tpa = tp;
		vanish = vanis;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public boolean isTell() {
		return tell;
	}

	public void setTell(boolean tell) {
		this.tell = tell;
	}

	public int getCoins() {
		return coins;
	}

	public void setCoins(int coins) {
		this.coins = coins;
	}

	public boolean isTpa() {
		return tpa;
	}

	public void setTpa(boolean tpa) {
		this.tpa = tpa;
	}

	public boolean isVanish() {
		return vanish;
	}

	public void setVanish(boolean vanish) {
		this.vanish = vanish;
	}
	
}

Ai voce salva esse objeto em cache, é um esqueminha bem loco, tipo assim:

	public static ArrayList<Preferencias> preferencias_cached = new ArrayList<>();
	
	@EventHandler
	private void aoEntrar(PlayerJoinEvent e) {
		Preferencias pref = new Preferencias(e.getPlayer().getName(), false, 55, true, false);
		preferencias_cached.add(pref);
	}

Ai voce cria uma task, de 5 em 5 minutos, pra atualizar as informacoes do "preferencias_cached" direto no mysql, assim voce reduz o numero de conexoes e de tasks ;)

 

 

 

 

@EDIT: Ai, se voce precisar consultar alguma coisa no mysql, e ja estiver o "preferencias_cached" salvo no arraylist, nao vai precisar consultar o mysql, so vai precisar consultar a variavel ;)

Obrigado, mais uma outra coisa, meu plugin de grupos é via mysql, e em todos os servidores + bungeecord, oque faço ?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...