Arquivado [TUTORIAL] Como utilizar MySQL em seus plugins

Discussão em 'Dicas e Tutoriais' iniciado por Gabriel8579, 16 Novembro 2017.

?

Esse tutorial foi útil?

  1. Sim

    100.0%
  2. Não

    0 voto(s)
    0.0%
  1. Gabriel8579
    Offline

    Gabriel8579 Veterano Veterano VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    18 Janeiro 2016
    Mensagens:
    434
    Sexo:
    Masculino
    Avaliações:
    +250 / -1
    Apelido no Minecraft:
    Gabriel8579
    Hey ladies and gentlemen,

    Hoje trago meu primeiro tutorial (oficialmente hehe) de Como utilizar MySQL em seus plugins
    Resolvi fazer este tutorial pois apanhei muito para aprender (e olha que eu já sabia mexer com o MySQL)

    Então deixa de enrolação e vamos ao que interessa.

    Bom primeiro de tudo vocês irão precisar de um servidor MySQL que tenha possibilidade de edição remota (ou seja executar comandos através de outros meios sem ser o PhPMyAdmin. Para este tutorial estarei ensinando a criar um banco de dados em seu próprio computador para ficar mais fácil.

    Vamos usar o XAMPP (você pode obter-lo aqui), instale normalmente (afinal este não é um tutorial especifico deste programa é só dar next infinitamente até instalar).

    Concluída a instalação execute o programa (geralmente ele executa automaticamente tanto no final da instalação quanto na inicialização do windows) ele estará na bandeja do sistema (perto do relógio)
    [​IMG]

    Ok feito isso vai abrir o painel de controle dele então clicamos em start do Apache e do MySQL
    [​IMG]

    Feito isso clique em admin do MySQL e irá abrir uma página do gerenciador de databases o phpmyadmin...
    Clique em new
    [​IMG]
    Agora vamos criar nossa primeira database, coloque o nome e clique em criar
    [​IMG]
    Feito isso vamos criar uma tabela... aonde as colunas são localizadas colocamos um nome e novamente em executar se quiser altere o número de colunas conforme for necessário no meu caso eu irei fazer um plugin de login/register simples então usarei 4 colunas (nome, senha, uuid, id)
    [​IMG]

    Configure a tabela conforme for necessário... não entrarei em muitos detalhes pois o foco do tutorial não é esse
    [​IMG]
    Ok clicamos em guarda e buuuummmm já temos nossa tabela, nossa database configuradas agora vamos para o que interessa a programação :wink:
    Ok agora sim estamos atingindo o foco do tutorial... bora para um IDE vou utilizar o eclipse pois minha RAM está limitada para o IntelliJ

    Ok, não vou explicar passo a passo do plugin, porém vou deixar a source disponível para vocês estudarem vou focar somente no MySQL

    Vamos lá com a Main já criada o mais para cima possível (fora de todas as voids e outras funções porem ainda dentro da class) vamos importar nossos dados do MySQL da config do plugin (mais para frente vou ensinar a obter-los)

    Ah eu já ia me esquecendo hehe você precisa baixar esta API para ficar mais simples e fácil de se usar é bem simples é só jogar dentro do seu projeto (clone os arquivos e jogue as packages dentro do seu projeto)

    Ok voltando para o tutorial coloque essas variáveis em sua classe Main

    Código (Forge Crash):
    String host = (String) getConfig().get("config.hostSql");
        String user = (String) getConfig().get("config.userSql");
        String pass = (String) getConfig().get("config.passSql");
        String db = (String) getConfig().get("config.dbSql");
        String port = (String) getConfig().get("config.portaSql");
       
    Essas variáveis serão os nossos dados de acesso ao servidor MySQL

    Agora vamos abrir a conexão

    Código (Forge Crash):
    MySQL MySQL = new MySQL(host, port, db, user, pass); //importe: com.huskehhh.mysql.mysql.MySQL
        public Connection c = null; //importe: java.sql.Connection
    Ok neste passo nós somente dizemos para o plugin quais são os dados de acesso ao MySQL
    agora vamos conectar

    Dentro da onEnable() vamos fazer o seguinte:

    Código (Forge Crash):

    @Override
        public void onEnable() {
            try {
                c = MySQL.openConnection();
            } catch (SQLException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
     
    Agora sim já iniciamos a conexão
    Vamos para a parte legal :wink:

    Crie uma classe para ser o comando de registrar
    Lembrando que irei deixar a source para download
    Vamos fazer nosso comando

    Código (Forge Crash):
    @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(!(sender instanceof Player)) {
                sender.sendMessage("Somente players!!!!!");
                return true;
            }
            Player p = (Player)sender;
           
            try {
               
            } catch (SQLException e) {
                e.printStackTrace();
            }
               
            return false;
        }
    Bom tudo o que iremos fazer estará dentro deste try
    Ok primeiramente vamos fazer nosso Statement (java.sql.Statement) que irá realizar os comandos em nosso banco de dados (consultas, updates, etc) e nosso ResultSET (java.sql.ResultSet) que irá obter esses dados da nossa consulta
    Código (Forge Crash):
    Statement s = Main.plugin.c.createStatement();
                ResultSet res = s.executeQuery("");
    Dentro dessa string da querry que iremos fazer as coisas legais hehe
    vamos colocar assim

    Código (Forge Crash):
    "SELECT * FROM users WHERE Nome = '" + p.getName() + "';"
     
    Ok vou explicar um pouco melhor este comando
    SELECT * = Selecione tudo
    FROM x = de x (tabela)
    WHERE y='z' = onde y (coluna) for z (valor)
    após ter feito isso ficaremos com um código parecido com este

    Código (Forge Crash):
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(!(sender instanceof Player)) {
                sender.sendMessage("Somente players!!!!!");
                return true;
            }
            Player p = (Player)sender;
            try {
                Statement s = Main.plugin.c.createStatement();
                ResultSet res = s.executeQuery("SELECT * FROM users WHERE Nome = '" + p.getName() + "';");
               
            } catch (SQLException e) {
                e.printStackTrace();
            }  
            return false;
        }

    Então agora iremos fazer nossa primeira condição (se existe esse resultado)

    então colocamos

    Código (Forge Crash):
    if(res.next()) {
                    p.sendMessage("Você já está registrado!");
                    return true;
                }
    Agora que verificamos que o usuário ainda não está registrado vamos fazer um INSERT no banco de dados para registrá-lo

    Faremos isso pelo Statement s que já havíamos definido la em cima
    porem primeiro vamos checar se ele digitou o comando corretamente (/registrar senha confirmação-senha)
    Código (Forge Crash):
    if(args.length != 2) {
                    p.sendMessage("Use /registrar senha repetir-senha");
                    return true;
                }
    Agora sim podemos continuar
    Vamos checar se as senhas batem:

    Código (Forge Crash):
    String s1 = args[0];
                String s2 = args[1];
                if(!s1.equals(s2)) {
                    p.sendMessage("Você deve repetir a senha corretamente");
                    return true;
                }
    Agora para dar mais segurança a nossa DB vamos criptografar a senha em MD5
    Código (Forge Crash):
                MessageDigest alg = MessageDigest.getInstance("MD5");
                byte digerir[] = alg.digest(s1.getBytes("UTF-8"));
                StringBuilder hex = new StringBuilder();
                for (byte b : digerir) {
                    hex.append(String.format("%02X", 0xFF & b));
                }
                String senha = hex.toString();
    Faça as importações e adicione essas exceptions ao catch NoSuchAlgorithmException | UnsupportedEncodingException ficando assim:

    Código (Forge Crash):
    catch (SQLException | NoSuchAlgorithmException | UnsupportedEncodingException e) {
                e.printStackTrace();
            }    
    Finalmente iremos registrar nosso usuário, vamos fazer isso pelo s.execute(String SQL);
    Código (Forge Crash):
    s.execute("INSERT INTO users (Nome, Senha, UUID, ID) VALUES ('" + p.getName() + "', '" + senha + "', '" + p.getUniqueId().toString() + "', NULL);");
    Vou explicar resumidamente o código SQL
    INSERT INTO x (y[]) VALUES (z[]) = Insira em x (tabela) (y(colunas a serem afetadas, precisam estar em na mesma ordem que você criou, ou seja colocou o nome por primeiro coloque aqui também)) valores (z(os valores entre '' e separados por , na mesma ordem do y))


    Vou terminar esta primeira parte, mais já estou postando a segunda pois o editor não quer me deixar escrever mais kkkk fica bugando​
     
    • Útil Útil x 3
  2. StupPlayer
    Offline

    StupPlayer Membro Conhecido VIP Industrial

    Afiliado:
    17 Outubro 2015
    Mensagens:
    611
    Sexo:
    Masculino
    Avaliações:
    +501 / -0
    Apelido no Minecraft:
    StupPlayer
    bom tutorial mas pra q toda essa coisa de servidor remoto, é so deixar tudo no localhost e gg
     
  3. Gabriel8579
    Offline

    Gabriel8579 Veterano Veterano VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    18 Janeiro 2016
    Mensagens:
    434
    Sexo:
    Masculino
    Avaliações:
    +250 / -1
    Apelido no Minecraft:
    Gabriel8579
    exatamente o q fiz :wink:
     
  4. StupPlayer
    Offline

    StupPlayer Membro Conhecido VIP Industrial

    Afiliado:
    17 Outubro 2015
    Mensagens:
    611
    Sexo:
    Masculino
    Avaliações:
    +501 / -0
    Apelido no Minecraft:
    StupPlayer
    não precisa de tudo isso pra usar MySQL no localhost afaik, no linux é só dar apt-get
     
  5. Gabriel8579
    Offline

    Gabriel8579 Veterano Veterano VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    18 Janeiro 2016
    Mensagens:
    434
    Sexo:
    Masculino
    Avaliações:
    +250 / -1
    Apelido no Minecraft:
    Gabriel8579
    hehe linux é bem mais fácil
     
  6. StupPlayer
    Offline

    StupPlayer Membro Conhecido VIP Industrial

    Afiliado:
    17 Outubro 2015
    Mensagens:
    611
    Sexo:
    Masculino
    Avaliações:
    +501 / -0
    Apelido no Minecraft:
    StupPlayer
    usei linux, por que eu sou mais familiar, como exemplo, mas tem literalmente um instalador de MySQL pra windows ._.
     
  7. Lucas_Gamer13
    Offline

    Lucas_Gamer13 Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    17 Novembro 2015
    Mensagens:
    1,714
    Sexo:
    Masculino
    Avaliações:
    +1,610 / -0
    Apelido no Minecraft:
    Lucas_gamer13
    Faz um tutorial de banco de dados embedded
     
  8. Gabriel8579
    Offline

    Gabriel8579 Veterano Veterano VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    18 Janeiro 2016
    Mensagens:
    434
    Sexo:
    Masculino
    Avaliações:
    +250 / -1
    Apelido no Minecraft:
    Gabriel8579
    não conheço muito mais vou dar uma estudada e se eu conseguir eu faço um tutorial :wink:
     
  9. natan12_
    Offline

    natan12_ Veterano Veterano VIP Industrial

    Afiliado:
    22 Fevereiro 2014
    Mensagens:
    1,131
    Sexo:
    Masculino
    Avaliações:
    +508 / -0
    Apelido no Minecraft:
    natan12_
    /register '); DROP TABLE users; --

    ou
    Código (Forge Crash):
    /register ');drop/**/table/**/users;-- ');drop/**/table/**/users;--
     
    • Vencedor Vencedor x 2
    Última edição: 25 Março 2018
  10. Lucas_Gamer13
    Offline

    Lucas_Gamer13 Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    17 Novembro 2015
    Mensagens:
    1,714
    Sexo:
    Masculino
    Avaliações:
    +1,610 / -0
    Apelido no Minecraft:
    Lucas_gamer13
    hmm que top, e tem alguma forma de evitar isso?
     
  11. Mr_Bilbis
    Offline

    Mr_Bilbis Líder dos Ajudantes, de Publicidade e do Discord Equipe GameMods Criador de Conteúdo Ajudante do Servidor Moderador do Discord Construtor Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    23 Novembro 2014
    Mensagens:
    2,899
    Avaliações:
    +2,255 / -1
    Apelido no Minecraft:
    Mr_Bilbis
    Colocar a senha em SHA1 por exemplo
     
    • Útil Útil x 1
  12. natan12_
    Offline

    natan12_ Veterano Veterano VIP Industrial

    Afiliado:
    22 Fevereiro 2014
    Mensagens:
    1,131
    Sexo:
    Masculino
    Avaliações:
    +508 / -0
    Apelido no Minecraft:
    natan12_
  13. Gabriel8579
    Offline

    Gabriel8579 Veterano Veterano VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    18 Janeiro 2016
    Mensagens:
    434
    Sexo:
    Masculino
    Avaliações:
    +250 / -1
    Apelido no Minecraft:
    Gabriel8579
    Esse foi um tutorial simples, sem muita segurança lógico que há várias falhas
     
  14. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    737
    Sexo:
    Masculino
    Avaliações:
    +215 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Olá.
    Sei que esse tópico tem bastante tempo q esta aqui, mas eu preciso de uma ajuda:
    Dentro da config, oq eu coloco em:
    Código (Forge Crash):

    hostSql:
    userSql:
    passSql:
    dbSql:
    portaSql:
     
     
  15. armelin1
    Offline

    armelin1 Moderador Sênior do Fórum Equipe GameMods Moderador do Fórum Moderador do Aventura Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    5 Maio 2014
    Mensagens:
    1,885
    Sexo:
    Masculino
    Avaliações:
    +642 / -0
    Apelido no Minecraft:
    armelin1
    A host, o usuário, a senha, o banco de dados e a porta.
     
  16. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    737
    Sexo:
    Masculino
    Avaliações:
    +215 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Isso eu sei, mas eu preciso mais mesmo, é da senha, banco de dados e porta
     
  17. armelin1
    Offline

    armelin1 Moderador Sênior do Fórum Equipe GameMods Moderador do Fórum Moderador do Aventura Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    5 Maio 2014
    Mensagens:
    1,885
    Sexo:
    Masculino
    Avaliações:
    +642 / -0
    Apelido no Minecraft:
    armelin1
    Elas são suas, você que tem que saber.
     
    • Concordo Concordo x 1
  18. Duyzee
    Offline

    Duyzee Membro Conhecido VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    28 Fevereiro 2017
    Mensagens:
    707
    Sexo:
    Feminino
    Avaliações:
    +482 / -1
    Apelido no Minecraft:
    Kaljak_Sirah1
    Seu banco de dados tem SENHA? Se não tiver, deixe vazio, no campo dbSql: (nome da sua database)
    portaSql: 3306 (porta da database/mysql)
     
    • Útil Útil x 1
  19. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    737
    Sexo:
    Masculino
    Avaliações:
    +215 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Screenshot by Lightshot
    Screenshot by Lightshot
     
  20. Duyzee
    Offline

    Duyzee Membro Conhecido VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    28 Fevereiro 2017
    Mensagens:
    707
    Sexo:
    Feminino
    Avaliações:
    +482 / -1
    Apelido no Minecraft:
    Kaljak_Sirah1
    Você tem que criar essa classe em qualquer package e importar ela, não pegar o import direto do Gabriel. :face_palm:
     

Compartilhe esta Página