Conecte o Java a um database MySQL

Como você se conecta a um database MySQL em Java?

Quando eu tento, fico

java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:247) 

Ou

 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

DriverManager é uma maneira bastante antiga de fazer as coisas. A melhor maneira é obter um DataSource , procurando um que seu contêiner de servidor de aplicativos já tenha configurado para você:

 Context context = new InitialContext(); DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB"); 

ou instanciando e configurando um diretamente do seu driver de database:

 MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUser("scott"); dataSource.setPassword("tiger"); dataSource.setServerName("myDBHost.example.org"); 

e, em seguida, obter conexões dele, o mesmo que acima:

 Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS"); ... rs.close(); stmt.close(); conn.close(); 

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

  1. Baixe e instale o servidor MySQL . Apenas faça do jeito usual. Lembre-se do número da porta sempre que você mudou. É por padrão 3306 .

  2. Faça o download do driver JDBC e coloque-o no caminho de class , extraia o arquivo ZIP e coloque o arquivo JAR contendo no caminho de class. O driver JDBC específico do fornecedor é uma implementação concreta da API do JDBC ( tutorial aqui ).

    Se você estiver usando um IDE como o Eclipse ou o Netbeans, poderá adicioná-lo ao caminho de class adicionando o arquivo JAR como Biblioteca ao Caminho de Construção nas propriedades do projeto.

    Se você estiver fazendo isso “plain vanilla” no console de comando, será necessário especificar o caminho para o arquivo JAR no argumento -cp ou -classpath ao executar seu aplicativo Java.

      java -cp; / caminho / para / mysql-connector.jar com.example.YourClass 

    O. está ali apenas para adicionar o diretório atual ao classpath para que ele possa localizar com.example.YourClass e o ; é o separador de caminho de class como no Windows. No Unix e clones : deve ser usado.

  3. Crie um database no MySQL . Vamos criar um database javabase . É claro que você quer World Domination, então vamos usar o UTF-8 também.

     CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
  4. Crie um usuário para Java e conceda access . Simplesmente porque usar root é uma prática ruim.

     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 password é a senha aqui.

  5. Determine o URL do JDBC . Para conectar o database MySQL usando Java, você precisa de um URL JDBC na seguinte syntax:

      jdbc: mysql: // hostname: port / databasename 
    • hostname : O nome do host onde o servidor MySQL está instalado. Se ele estiver instalado na mesma máquina em que você executa o código Java, você poderá usar apenas o localhost . Também pode ser um endereço IP como 127.0.0.1 . Se você encontrar problemas de conectividade e usando 127.0.0.1 vez de localhost resolvido, então você tem um problema em 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 database ao qual você gostaria de se conectar. Isso é javabase .

    Portanto, o URL final deve se parecer com:

      jdbc: mysql: // localhost: 3306 / javabase 
  6. Teste a conexão com o MySQL usando o Java . Crie uma class Java simples com um método main() 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ê obtiver uma SQLException: No suitable driver , isso significa que o driver JDBC não foi carregado automaticamente ou que a URL do JDBC está errada (isto é, não foi reconhecida por nenhum dos drivers carregados). Normalmente, um driver JDBC 4.0 deve ser carregado automaticamente quando você simplesmente o solta no caminho de class de tempo de execução. Para excluir um e outro, você pode sempre 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 a chamada newInstance() não é necessária aqui. É só para consertar o antigo e buggy org.gjt.mm.mysql.Driver . Explicação aqui . Se essa linha lançar ClassNotFoundException , o arquivo JAR contendo a class do driver JDBC simplesmente não será colocado no caminho de class.

    Note que você não precisa carregar o driver toda vez antes de conectar. Apenas apenas uma vez durante a boot do aplicativo é suficiente.

    Se você obtiver uma SQLException: Connection refused ou Tempo Connection timed out ou uma CommunicationsException: Communications link failure específica do CommunicationsException: Communications link failure MySQL, isso significa que o database não está acessível. Isso pode ter uma ou mais das seguintes causas:

    1. Endereço IP ou nome do host na URL do JDBC está incorreto.
    2. Nome do host na URL do JDBC não é reconhecido pelo servidor DNS local.
    3. O número da porta está ausente ou errado na URL do JDBC.
    4. O servidor de database está inativo.
    5. O servidor de database não aceita conexões TCP / IP.
    6. O servidor de database 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 na URL do JDBC.
    3. Verifique isso com base no my.cnf do database MySQL.
    4. Inicie o database.
    5. Verifique se o mysqld é iniciado sem a --skip-networking option .
    6. Reinicie o database e corrija seu código de forma que ele finally feche as conexões.
    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 obtendo muitas delas em pouco tempo, o database poderá ficar sem conexões e seu aplicativo poderá quebrar. Sempre adquira a Connection em uma instrução try-with-resources . Ou se você ainda não estiver no Java 7, feche-o explicitamente em finally de um bloco try-finally . Fechar finally é apenas garantir que ele seja fechado também em caso de exceção. Isso também se aplica a Statement , PreparedStatement e ResultSet .

Foi assim que as preocupações com conectividade. Você pode encontrar aqui um tutorial mais avançado sobre como carregar e armazenar objects de modelo Java completos em um database com a ajuda de uma class DAO básica.


Usar um padrão singleton para a conexão de database é uma má abordagem. Veja entre outras questões: http://stackoverflow.com/q/9428573/ . Este é um erro no primeiro passo.

Inicializar as constantes do database

Criar nome de usuário, senha, URL e drivers do database de propriedades constantes, limite de pesquisa etc.

 // init database constants private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver"; private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name"; private static final String USERNAME = "root"; private static final String PASSWORD = ""; private static final String MAX_POOL = "250"; // set your own limit 

Inicializar conexão e propriedades

Depois que a conexão é estabelecida, é melhor armazenar para fins de reutilização.

 // init connection object private Connection connection; // init properties object private Properties properties; 

Crie propriedades

O object de propriedades contém as informações de conexão, verifique se já está definido.

 // create properties private Properties getProperties() { if (properties == null) { properties = new Properties(); properties.setProperty("user", USERNAME); properties.setProperty("password", PASSWORD); properties.setProperty("MaxPooledStatements", MAX_POOL); } return properties; } 

Conecte o database

Agora conecte-se ao database usando as constantes e propriedades inicializadas.

 // connect database public Connection connect() { if (connection == null) { try { Class.forName(DATABASE_DRIVER); connection = DriverManager.getConnection(DATABASE_URL, getProperties()); } catch (ClassNotFoundException | SQLException e) { // Java 7+ e.printStackTrace(); } } return connection; } 

Desconectar o database

Quando terminar as operações do database, basta fechar a conexão.

 // disconnect database public void disconnect() { if (connection != null) { try { connection.close(); connection = null; } catch (SQLException e) { e.printStackTrace(); } } } 

Tudo junto

Use esta class MysqlConnect diretamente após alterar database_name, nome de usuário e senha, etc.

 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class MysqlConnect { // init database constants private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver"; private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name"; private static final String USERNAME = "root"; private static final String PASSWORD = ""; private static final String MAX_POOL = "250"; // init connection object private Connection connection; // init properties object private Properties properties; // create properties private Properties getProperties() { if (properties == null) { properties = new Properties(); properties.setProperty("user", USERNAME); properties.setProperty("password", PASSWORD); properties.setProperty("MaxPooledStatements", MAX_POOL); } return properties; } // connect database public Connection connect() { if (connection == null) { try { Class.forName(DATABASE_DRIVER); connection = DriverManager.getConnection(DATABASE_URL, getProperties()); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } return connection; } // disconnect database public void disconnect() { if (connection != null) { try { connection.close(); connection = null; } catch (SQLException e) { e.printStackTrace(); } } } } 

Como usar?

Inicialize a class do database.

 // !_ note _! this is just init // it will not create a connection MysqlConnect mysqlConnect = new MysqlConnect(); 

Algum outro lugar no seu código …

 String sql = "SELECT * FROM `stackoverflow`"; try { PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql); ... go on ... ... go on ... ... DONE .... } catch (SQLException e) { e.printStackTrace(); } finally { mysqlConnect.disconnect(); } 

Isso é tudo 🙂 Se alguma coisa para melhorar editá-lo! Espero que isso seja útil.

 String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase"; String user = "username"; String password = "password"; // Load the Connector/J driver Class.forName("com.mysql.jdbc.Driver").newInstance(); // Establish connection to MySQL Connection conn = DriverManager.getConnection(url, user, password); 

Aqui está o mínimo que você precisa para obter dados de um database MySQL:

 Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/foo", "root", "password"); Statement stmt = conn.createStatement(); stmt.execute("SELECT * FROM `FOO.BAR`"); stmt.close(); conn.close(); 

Adicione exception handling, configuração etc. para provar.

Conexão JDBC MySQL com useSSL.

 private String db_server = BaseMethods.getSystemData("db_server"); private String db_user = BaseMethods.getSystemData("db_user"); private String db_password = BaseMethods.getSystemData("db_password"); private String connectToDb() throws Exception { String jdbcDriver = "com.mysql.jdbc.Driver"; String dbUrl = "jdbc:mysql://" + db_server + "?verifyServerCertificate=false" + "&useSSL=true" + "&requireSSL=true"; System.setProperty(jdbcDriver, ""); Class.forName(jdbcDriver).newInstance(); Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password); Statement statement = conn.createStatement(); String query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "\"" + letterID + "\""; ResultSet resultSet = statement.executeQuery(query); resultSet.next(); return resultSet.getString(1); } 

você precisa ter o conector do mysql no seu classpath.

em Java JDBC API faz tudo com bancos de dados. usando JDBC, podemos escrever aplicativos Java para
1. Enviar consultas ou atualizar SQL para database (qualquer database relacional) 2. Recuperar e processar os resultados do database

Com menos de três etapas, podemos recuperar dados de qualquer database

 Connection con = DriverManager.getConnection( "jdbc:myDriver:DatabaseName", dBuserName, dBuserPassword); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } 

Código curto e doce.

 try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver Loaded"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root",""); //Database Name - testDB, Username - "root", Password - "" System.out.println("Connected..."); } catch(Exception e) { e.printStackTrace(); } 

Para o SQL Server 2012

 try { String url = "jdbc:sqlserver://KHILAN:1433;databaseName=testDB;user=Khilan;password=Tuxedo123"; //KHILAN is Host and 1433 is port number Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("Driver Loaded"); conn = DriverManager.getConnection(url); System.out.println("Connected..."); } catch(Exception e) { e.printStackTrace(); } 

Você pode ver todas as etapas para conectar o database MySQL do aplicativo Java aqui . Para outro database, você só precisa mudar o driver apenas no primeiro passo. Por favor, certifique-se de que você forneça o caminho certo para o database e corrija o nome de usuário e a senha.

Visite http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA

Connection eu estava usando há algum tempo atrás, estava parecendo a maneira mais fácil, mas também havia recomendação para fazer lá if declaração – exatamente

 Connection con = DriverManager.getConnection( "jdbc:myDriver:DatabaseName", dBuserName, dBuserPassword); if (con != null){ //..handle your code there } 

Ou algo parecido desse jeito 🙂

Provavelmente há algum caso, enquanto getConnection pode retornar null 🙂

Conexão JDBC MySql:

 Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","Username","Password"); Statement stmt=con.createStatement(); stmt = con.createStatement(); ResultSet rs=stmt.executeQuery("Select * from Table"); 

Código curto

 public class DB { public static Connection c; public static Connection getConnection() throws Exception { if (c == null) { Class.forName("com.mysql.jdbc.Driver"); c =DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASE", "USERNAME", "Password"); } return c; } // Send data TO Database public static void setData(String sql) throws Exception { DB.getConnection().createStatement().executeUpdate(sql); } // Get Data From Database public static ResultSet getData(String sql) throws Exception { ResultSet rs = DB.getConnection().createStatement().executeQuery(sql); return rs; } }