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-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 localizarcom.example.YourClass
e 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.1
em vez delocalhost
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ã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 refused
ouConnection timed out
ou umCommunicationsException: 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:
- 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.cnf
do 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 aConnection
em umtry-with-resources
declaração . Ou se você ainda não estiver no Java 7, feche-o explicitamente emfinally
de umtry-finally
quadra. Fechando emfinally
é apenas para garantir que ele seja fechado também em caso de uma exceção. Isso também se aplica aStatement
,PreparedStatement
eResultSet
.
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.