Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conectar Java a um banco de dados MySQL


Aqui está uma explicação passo a passo de como instalar o MySQL e JDBC e como usá-lo:

  1. Baixar e instale o servidor MySQL . Basta fazê-lo da maneira usual. Lembre-se do número da porta sempre que o alterar. É por padrão 3306 .

  2. Baixar o driver JDBC e coloque no classpath , extraia o arquivo ZIP e coloque o arquivo JAR contido no caminho de classe. O driver JDBC específico do fornecedor é uma implementação concreta do API JDBC (tutorial aqui ).

    Se você estiver usando um IDE como Eclipse ou Netbeans, poderá adicioná-lo ao classpath adicionando o arquivo JAR como Library para o Caminho de construção nas propriedades do projeto.

    Se você estiver fazendo isso "plain vanilla" no console de comando, precisará especificar o caminho para o arquivo JAR no -cp ou -classpath argumento ao executar seu aplicativo Java.
    java -cp .;/path/to/mysql-connector.jar com.example.YourClass

    O . está lá apenas para adicionar o atual diretório para o caminho de classe também para que ele possa localizar com.example.YourClass e o ; é o separador de caminho de classe como no Windows. Em Unix e clones : deve ser usado.

  3. Crie um banco de dados no MySQL . Vamos criar um banco de dados javabase . Claro que você quer a Dominação Mundial, então vamos usar UTF-8 também.
    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    

  4. Criar um usuário para Java e conceder ele acessa . Simplesmente porque usando root é uma má prática.
    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    

    Sim, java é o nome de usuário e a password é a senha aqui.

  5. Determinar o URL JDBC . Para conectar o banco de dados MySQL usando Java, você precisa de um URL JDBC na seguinte sintaxe:
    jdbc:mysql://hostname:port/databasename

    • hostname :O nome do host onde o servidor MySQL está instalado. Se estiver instalado na mesma máquina em que você executa o código Java, basta usar localhost . Também pode ser um endereço IP como 127.0.0.1 . Se você encontrar problemas de conectividade e estiver usando 127.0.0.1 em vez de localhost resolvido, então você tem um problema na sua configuração de rede/DNS/hosts.

    • port :A porta TCP/IP onde o servidor MySQL escuta. Isso é por padrão 3306 .

    • databasename :o nome do banco de dados ao qual você deseja se conectar. Isso é javabase .

    Portanto, a URL final deve ser semelhante a:
    jdbc:mysql://localhost:3306/javabase

  6. Testar a conexão para MySQL usando Java . Crie uma classe Java simples com um main() método para testar a conexão.
    String url = "jdbc:mysql://localhost:3306/javabase";
    String username = "java";
    String password = "password";
    
    System.out.println("Connecting database...");
    
    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        System.out.println("Database connected!");
    } catch (SQLException e) {
        throw new IllegalStateException("Cannot connect the database!", e);
    }
    

    Se você receber uma SQLException: No suitable driver , isso significa que o driver JDBC não foi carregado automaticamente ou que o URL JDBC está errado (ou seja, não foi reconhecido por nenhum dos drivers carregados). Normalmente, um driver JDBC 4.0 deve ser carregado automaticamente quando você o solta no caminho de classe de tempo de execução. Para excluir um e outro, você sempre pode carregá-lo manualmente conforme abaixo:
    System.out.println("Loading driver...");
    
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver loaded!");
    } catch (ClassNotFoundException e) {
        throw new IllegalStateException("Cannot find the driver in the classpath!", e);
    }
    

    Observe que o newInstance() chamada é não preciso aqui. É apenas para corrigir o antigo e bugado org.gjt.mm.mysql.Driver . Explicação aqui . Se esta linha lançar ClassNotFoundException , o arquivo JAR que contém a classe do driver JDBC simplesmente não será colocado no caminho de classe.

    Observe que você não precisa carregar o driver todas as vezes antes conectando. Apenas uma vez durante a inicialização do aplicativo é suficiente.

    Se você receber uma SQLException: Connection refused ou Connection timed out ou um CommunicationsException: Communications link failure específico do MySQL , isso significa que o banco de dados não está acessível. Isso pode ter uma ou mais das seguintes causas:
    1. O endereço IP ou nome do host no URL JDBC está incorreto.
    2. O nome do host no URL JDBC não é reconhecido pelo servidor DNS local.
    3. O número da porta está ausente ou incorreto no URL JDBC.
    4. O servidor de banco de dados está inativo.
    5. O servidor DB não aceita conexões TCP/IP.
    6. O servidor DB ficou sem conexões.
    7. Algo entre Java e DB está bloqueando conexões, por exemplo, um firewall ou proxy.


    Para resolver um ou outro, siga os seguintes conselhos:
    1. Verifique e teste-os com ping .
    2. Atualize o DNS ou use o endereço IP no URL JDBC.
    3. Verifique com base em my.cnf do banco de dados MySQL.
    4. Inicie o banco de dados.
    5. Verifique se o mysqld foi iniciado sem a opção --skip-networking option .
    6. Reinicie o banco de dados e corrija seu código de acordo com o fechamento das conexões em finally .
    7. Desative o firewall e/ou configure o firewall/proxy para permitir/encaminhar a porta.


    Observe que fechar a Connection é extremamente importante. Se você não fechar conexões e continuar recebendo muitas delas em pouco tempo, o banco de dados pode ficar sem conexões e seu aplicativo pode quebrar. Sempre adquira a Connection em um try-with-resources declaração . Ou se você ainda não estiver no Java 7, feche-o explicitamente em finally de um try-finally quadra. Fechando em finally é apenas para garantir que ele seja fechado também em caso de uma exceção. Isso também se aplica a Statement , PreparedStatement e ResultSet .

Foi isso no que diz respeito às preocupações de conectividade. Você pode encontrar aqui um tutorial mais avançado sobre como carregar e armazenar objetos de modelo Java completos em um banco de dados com a ajuda de uma classe DAO básica.

Usar um padrão singleton para a conexão de banco de dados é uma abordagem ruim. Veja entre outras perguntas:http://stackoverflow.com/q/9428573/ . Este é um erro inicial número 1.