Ir para conteúdo

MySQL Async


Ygor

Posts Recomendados

Olá,

Estava criando um plugin que precisa armazenar seus dados em MySQL e me falaram há um tempo que as Queries e Updates devem ser feitos em Async.

Eu gostaria de um exemplo de como fazer isso.

Já tentei de algumas formas e não consegui.

Se alguém puder fazer um código de uma tabela (jogador varchar, novo_nick varchar) para inserir o novo nick do jogador e pegar ele eu agradeceria.

 

Obrigado pela atenção.

Abraços.

Link para o comentário
Compartilhar em outros sites

Queries podem demorar para serem concluidas, por isso, async. Quando falamos para fazer algo em async(em bukkit), é simplesmente criar uma "task async" e fazer tudo dentro dela. Como você pode ter percebido, a main thread não espera essa task, por isso utilizamos "callbacks" quando queremos retornar algo dessa task.
Uma classe callback, como você pode ter imaginado, é uma classe que espera ser chamada. Ela, que normalmente é feita como uma interface e usada como uma classe anônima, possui um método que pode ser chamada em qualquer momento.
Aqui um exemplo:

public interface Callback {//Apenas um exemplo, isso poderia ser uma classe abstract ou até mesmo uma classe.
    public void call(String novo_nick);//Apenas um exemplo, isso poderia retornar qualquer objeto.
}

//Exemplo
public static void pegarNickNovo(String jogador, Callback callback){
    new BukkitRunnable(){
        public void run(){
            String novo_nick = null;
            try(PreparedStatement statement = connection.preparedStatement("SELECT novo_nick FROM jogadores WHERE jogador=?;")){
                statement.setString(1, jogador);
                ResultSet resultSet = statement.executeQuery();
                if(resultSet.next()){
                    novo_nick = resultSet.getString(1);
                }
            }catch(Exception exception){
                exception.print
            }finally{
                callback.call(novo_nick);
            }
        }
    }.runTaskAsync(plugin);
}

pegarNickNovo("bieel1503", new Callback(){
    public void call(String novo_nick){
        if(novo_nick != null){
            //eba
        }else{
            //droga!
        }
    }
});

 

Link para o comentário
Compartilhar em outros sites

5 horas atrás, bieel1503 disse:

Queries podem demorar para serem concluidas, por isso, async. Quando falamos para fazer algo em async(em bukkit), é simplesmente criar uma "task async" e fazer tudo dentro dela. Como você pode ter percebido, a main thread não espera essa task, por isso utilizamos "callbacks" quando queremos retornar algo dessa task.
Uma classe callback, como você pode ter imaginado, é uma classe que espera ser chamada. Ela, que normalmente é feita como uma interface e usada como uma classe anônima, possui um método que pode ser chamada em qualquer momento.
Aqui um exemplo:


public interface Callback {//Apenas um exemplo, isso poderia ser uma classe abstract ou até mesmo uma classe.
    public void call(String novo_nick);//Apenas um exemplo, isso poderia retornar qualquer objeto.
}

//Exemplo
public static void pegarNickNovo(String jogador, Callback callback){
    new BukkitRunnable(){
        public void run(){
            String novo_nick = null;
            try(PreparedStatement statement = connection.preparedStatement("SELECT novo_nick FROM jogadores WHERE jogador=?;")){
                statement.setString(1, jogador);
                ResultSet resultSet = statement.executeQuery();
                if(resultSet.next()){
                    novo_nick = resultSet.getString(1);
                }
            }catch(Exception exception){
                exception.print
            }finally{
                callback.call(novo_nick);
            }
        }
    }.runTaskAsync(plugin);
}

pegarNickNovo("bieel1503", new Callback(){
    public void call(String novo_nick){
        if(novo_nick != null){
            //eba
        }else{
            //droga!
        }
    }
});

 

Muito bem explicado, obrigado!

Você poderia me dar um exemplo com updates?

Agradeço desde já!

Link para o comentário
Compartilhar em outros sites

15 horas atrás, Ygor disse:

Muito bem explicado, obrigado!

Você poderia me dar um exemplo com updates?

Agradeço desde já!

Mesma lógica. O que muda é que o "executeUpdate" retorna '0', caso queria checar se não "upidaitou".
Se estiver com dúvida com o callback, o que eu recomendo é brincar um pouco com o código. A classe que eu criei como exemplo tem apenas um método, mas ela pode ter vários, por exemplo.

Link para o comentário
Compartilhar em outros sites

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