Ygor Postado Janeiro 4, 2020 Denunciar Compartilhar Postado Janeiro 4, 2020 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 More sharing options...
bieel1503 Postado Janeiro 5, 2020 Denunciar Compartilhar Postado Janeiro 5, 2020 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! } } }); 2 Link para o comentário Compartilhar em outros sites More sharing options...
Ygor Postado Janeiro 6, 2020 Autor Denunciar Compartilhar Postado Janeiro 6, 2020 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 More sharing options...
ShaoKhan Postado Janeiro 6, 2020 Denunciar Compartilhar Postado Janeiro 6, 2020 Basicamente quando você usa o async ele cria threads separadas fora da thread main (principal) que acaba não ocasionando picos de atrasos. Link para o comentário Compartilhar em outros sites More sharing options...
bieel1503 Postado Janeiro 6, 2020 Denunciar Compartilhar Postado Janeiro 6, 2020 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. 1 Link para o comentário Compartilhar em outros sites More sharing options...
ExtraPlays Postado Janeiro 15, 2020 Denunciar Compartilhar Postado Janeiro 15, 2020 Seu tópico foi marcado como Inativo. Para reverter esta ação, entre em contato com a equipe de Moderação. OBS: Essa mensagem é automática. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados