Aqui está uma explicação passo a passo de como instalar o MySQL e JDBC e como usá-lo:
-
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ão3306.
-
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-cpou-classpathargumento 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 localizarcom.example.YourClasse o;é o separador de caminho de classe como no Windows. Em Unix e clones:deve ser usado.
-
Crie um banco de dados no MySQL . Vamos criar um banco de dadosjavabase. 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; -
Criar um usuário para Java e conceder ele acessa . Simplesmente porque usandorooté 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 apasswordé a senha aqui.
-
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 usarlocalhost. Também pode ser um endereço IP como127.0.0.1. Se você encontrar problemas de conectividade e estiver usando127.0.0.1em vez delocalhostresolvido, 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ão3306.
-
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
-
-
Testar a conexão para MySQL usando Java . Crie uma classe Java simples com ummain()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 umaSQLException: 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 onewInstance()chamada é não preciso aqui. É apenas para corrigir o antigo e bugadoorg.gjt.mm.mysql.Driver. Explicação aqui . Se esta linha lançarClassNotFoundException, 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 umaSQLException: Connection refusedouConnection timed outou umCommunicationsException: Communications link failureespecífico do MySQL , isso significa que o banco de dados não está acessível. Isso pode ter uma ou mais das seguintes causas:
- O endereço IP ou nome do host no URL JDBC está incorreto.
- O nome do host no URL JDBC não é reconhecido pelo servidor DNS local.
- O número da porta está ausente ou incorreto no URL JDBC.
- O servidor de banco de dados está inativo.
- O servidor DB não aceita conexões TCP/IP.
- O servidor DB ficou sem conexões.
- Algo entre Java e DB está bloqueando conexões, por exemplo, um firewall ou proxy.
Para resolver um ou outro, siga os seguintes conselhos:
- Verifique e teste-os com
ping. - Atualize o DNS ou use o endereço IP no URL JDBC.
- Verifique com base em
my.cnfdo banco de dados MySQL. - Inicie o banco de dados.
- Verifique se o mysqld foi iniciado sem a opção
--skip-networking option. - Reinicie o banco de dados e corrija seu código de acordo com o fechamento das conexões em
finally. - Desative o firewall e/ou configure o firewall/proxy para permitir/encaminhar a porta.
Observe que fechar aConnectioné 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 aConnectionem umtry-with-resourcesdeclaração . Ou se você ainda não estiver no Java 7, feche-o explicitamente emfinallyde umtry-finallyquadra. Fechando emfinallyé apenas para garantir que ele seja fechado também em caso de uma exceção. Isso também se aplica aStatement,PreparedStatementeResultSet.
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:https://stackoverflow.com/q/9428573/ . Este é um erro inicial número 1.