Ir para conteúdo

[Tutorial] Como ter múltiplas conexões em seu plugin.


Snuck

Posts Recomendados

EwECDzc.png

Fala galera, beleza? Então, hoje, como puderam ver no título, irei ensinar a vocês como vocês podem ter dois tipos de conexões em seu plugin (Java).

Sem mais enrolação, vamos lá.

 

Primeiramente, crie um pacote de sua preferência (chamei de database), e lá crie uma classe chamada DatabaseConnector e uma enumeração chamada DatabaseType. Ficará mais ou menos assim.

UAEehq9.png

Agora você irá colar os códigos abaixo na classe DatabaseConnector.

Spoiler

import net.snuckdev.niveis.Main;
import org.bukkit.Bukkit;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DatabaseConnector {

    private String host;
    private String database;
    private String user;
    private String password;
    private int port;
    private DatabaseType databaseType;
    private String url;
    private Connection connection;

    public DatabaseConnector(String host, String database, String user, String password, int port, DatabaseType databaseType) {
        this.host = host;
        this.database = database;
        this.user = user;
        this.password = password;
        this.port = port;
        this.databaseType = databaseType;
    }

    public void connect() {

        if(this.databaseType.equals(DatabaseType.MYSQL)) {
            this.url = "jdbc:mysql://" + getHost() + ":" + getPort() + "/" + database;
            try {
                connection = DriverManager.getConnection(this.url, getUser(), getPassword());
                Bukkit.getConsoleSender().sendMessage("§b[Niveis] §aConexão montada com sucesso. (MySQL)");
                createTable("SnuckLevels", "nome varchar(32), level int, progresso int");
            } catch (SQLException e) {
                e.printStackTrace();
                Bukkit.getConsoleSender().sendMessage("§b[Niveis] §cFALHA! Erro ao conectar o MySQL.");
            }
        }

        if(this.databaseType.equals(DatabaseType.SQLITE)) {
            File file = new File(Main.getPlugin().getDataFolder(), "storage.db");
            this.url = "jdbc:sqlite:" + file;
            try {
                Class.forName("org.sqlite.JDBC");
                this.connection = DriverManager.getConnection(this.url);
                Bukkit.getConsoleSender().sendMessage("§b[Niveis] §aConexão montada com sucesso. (SQLite)");
                createTable("SnuckLevels", "nome varchar(32), level int, progresso int");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("Erro ao abrir as conexoes, desabilitando plugin...");
                Main.getPlugin().getPluginLoader().disablePlugin(Main.getPlugin());
            }
        }

    }

    public void close() {
        if(this.connection != null) {
            try {
                this.connection.close();
                this.connection = null;
                System.out.println("Conexao fechada com sucesso.");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public void createTable(String tableName, String columns) {
        PreparedStatement st = null;
        try {
            st = connection.prepareStatement("CREATE TABLE IF NOT EXISTS `" + tableName + "` (" + columns + ")");
            st.executeUpdate();
            st.close();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao criar a tabela " + tableName);
        }
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getDatabase() {
        return database;
    }

    public void setDatabase(String database) {
        this.database = database;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public DatabaseType getDatabaseType() {
        return databaseType;
    }

    public void setDatabaseType(DatabaseType databaseType) {
        this.databaseType = databaseType;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Connection getConnection() {
        return connection;
    }

    public void setConnection(Connection connection) {
        this.connection = connection;
    }
}

 

Lembre-se de mudar a instância do plugin para a SUA Main, aqui usei a do plugin que estava fazendo.

 

Após isto, crie dois elementos na enum DatabaseType, sendo eles: MYSQL e SQLITE, ficará mais ou menos assim:

OCYr0QW.png

Após isto, pronto! O núcleo da sua conexão está pronta. Agora vá para a sua classe principal, e instancie uma DatabaseConnector, ficará mais ou menos assim:

qswBQZ2.png

Agora crie o método getDatabaseConnector e retorne o databaseConnector instanciado, ficará mais ou menos assim:

dVkXFfH.png

Agora, crie um método com o nome de sua preferência, chamei de init(). Dentro dele defina a instância de databaseConnector, ficará mais ou menos assim:

47990nt.png

(lembre-se do databaseConnector.connect();).

Após isso, vá até sua config.yml (se não tem crie uma) e cole o seguinte texto:

Spoiler

Conexao:
  Tipo: MYSQL #MYSQL OU SQLITE
  Host: 'localhost'
  Porta: 3306
  Usuario: 'root'
  Senha: ''
  Banco: 'mcserver'

 

Tudo pronto. Agora para criar um statement você pode criar outra classe e pegar a Connection usando Main.getDatabaseConnector().getConnection().

Esse foi o tutorial, espero que tenham gostado.

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...