Ligar o Java a uma base de dados MySQL

Como se liga a uma base de dados MySQL em Java?

Quando tento, consigo ...
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

ou

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
Author: Mark Rotteveel, 2010-05-15

14 answers

DriverManager é uma maneira bastante antiga de fazer as coisas. A melhor maneira é obter um DataSource, quer Procurando um que o seu contentor do servidor de aplicações já tenha configurado para si:

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

Ou a instigar e configurar directamente um do seu controlador de base de dados:

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

E depois obter ligações dele, como acima:

Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
 215
Author: Sean Owen, 2010-05-15 09:10:09
Aqui está uma explicação passo a passo de como instalar o MySQL e o JDBC e como usá-lo:
  1. Baixe e instale o servidor de MySQL . Faz como sempre. Lembra-te do número do porto sempre que o mudares. É por padrão 3306.

  2. Obter O controlador JDBC e colocar em claspath , extrair o ficheiro ZIP e colocar o ficheiro JAR que contém no claspath. O driver específico do Fornecedor JDBC é um concreto implementação da API JDBC (tutorial aqui ).

    Se estiver a usar um IDE como o Eclipse ou o Netbeans, então poderá adicioná-lo ao classpath, adicionando o ficheiro JAR como Biblioteca para o local de Compilação nas propriedades do projecto.

    Se o estiver a fazer "plain vanilla" na consola de comandos, então terá de indicar a localização do ficheiro JAR no argumento -cp ou -classpath ao executar a sua aplicação Java.

    java -cp .;/path/to/mysql-connector.jar com.example.YourClass

    O . é apenas lá para adicionar oactual ao classpath também para que ele possa localizar com.example.YourClass e o ; é o separador de classpath tal como está nas janelas. Em Unix e clones : deve ser usado.

  3. Crie uma base de dados no MySQL. Vamos criar uma base de dados. Você quer dominar o mundo, então vamos usar UTF-8 também.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Crie um usuário para Java e grant acesso a ti . Simplesmente porque usar 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 utilizador e password é a senha aqui.

  5. Determinar {[55] } o URL do JDBC . Para ligar a base de dados MySQL com o Java, necessita de um URL JDBC com a seguinte sintaxe:

    jdbc:mysql://hostname:port/databasename
    • hostname: o nome da máquina onde está instalado o servidor de MySQL. Se estiver instalado na mesma máquina onde você executa o código Java, então você pode apenas usar localhost. Também pode ser um Endereço IP como 127.0.0.1. Se você encontrar problemas de conectividade e usar 127.0.0.1 em vez de localhost resolvê-lo, então você tem um problema em sua configuração de rede/DNS/hosts.

    • port: a porta TCP / IP onde o servidor de MySQL ouve. Isto é por omissão 3306.

    • databasename: o nome da base de dados a que gostaria de se ligar. Isso é ...

    Então o URL final deve parecer como:

    jdbc:mysql://localhost:3306/javabase
  6. Ensaio a ligação ao MySQL usando o Java . Crie uma classe Java simples com um método main() para testar a ligaçã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ê tiver um SQLException: No suitable driver, Então isso significa que ou o driver do JDBC não foi automaticamente carregado ou que a URL do JDBC está errada (ou seja, não foi reconhecida por nenhum dos drivers carregados). Normalmente, um driver JDBC 4.0 deve ser autoloaded quando você apenas deixá-lo em classpath em execução. Para excluir um e outro, você pode sempre carregá-lo manualmente como 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);
    }
    

    Note que a chamada é newInstance() Não necessária aqui. É só para consertar o velho e o buggy. explicação aqui . Se esta linha lançar ClassNotFoundException, Então o ficheiro JAR que contém a classe de controladores JDBC não é simplesmente colocado no classpath.

    Note que você não precisa carregar o motorista todas as vezes antes de ligar. Apenas uma vez durante a inicialização da aplicação é suficiente.

    Se tiveres um SQLException: Connection refused ou Connection timed out ou um MySQL específico CommunicationsException: Communications link failure, significa que o DB não está acessível. Isto pode ter uma ou mais das seguintes causas:

    1. o endereço IP ou o nome da máquina no URL do JDBC está errado.
    2. O Nome da máquina no URL do JDBC não é reconhecido pelo servidor DNS local.
    3. O número da porta está em falta ou está errado no URL do JDBC.
    4. O servidor DB está em baixo.
    5. O servidor DB não aceita ligações TCP/IP.
    6. O servidor DB ficou sem ligações.
    7. Algo entre Java e DB é ligações de bloqueio, por exemplo uma firewall ou um 'proxy'.

Para resolver um ou outro, siga os seguintes conselhos:

  1. verifique e teste-os com ping.
  2. actualizar o DNS ou usar o endereço IP no URL do JDBC.
  3. verifique com base em my.cnf De MySQL DB.
  4. iniciar o DB.
  5. verifique se o mysqld é iniciado sem o --skip-networking option.
  6. reinicie o DB e corrija o seu código de acordo que fecha as ligações em finally.
  7. desactivar a firewall e/ou configurar a firewall/proxy para permitir / encaminhar o porto.

Note que fechar o Connection é extremamente importante. Se você não fechar conexões e continuar recebendo muitos deles em um curto período de tempo, então a base de dados pode ficar sem conexões e sua aplicação pode quebrar. Adquirir sempre o Connection em um try-with-resources declaração Ou se ainda não estiver no Java 7, feche-o explicitamente em finally de um bloco try-finally. Fechando em finally é apenas para garantir que ele seja fechado também em caso de uma exceção. Isto aplica - se também a Statement, PreparedStatement e ResultSet.

Era isso no que diz respeito à conectividade. Você pode encontrar aqui um tutorial mais avançado como carregar e armazenar objetos do modelo Java fullworthy em uma base de dados com a ajuda de uma classe básica DAO.

Usar um padrão Singleton para a ligação DB é uma má abordagem. Ver entre outras questões: http://stackoverflow.com/q/9428573 isto é um erro de partida número 1.

 491
Author: BalusC, 2017-06-29 00:45:14

Inicializar as constantes da base de Dados

Criar um utilizador de base de dados de propriedades constantes, senha, URL e controladores, limite de sondagem, etc.

// init database constants
// com.mysql.jdbc.Driver
private static final String DATABASE_DRIVER = "com.mysql.cj.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 a ligação e as propriedades

Uma vez estabelecida a conexão, é melhor armazenar para fins de reutilização.
// init connection object
private Connection connection;
// init properties object
private Properties properties;

Criar Propriedades

O objecto propriedades contém a informação da ligação, verifique se já está definida.

// 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;
}

Ligue a base de Dados

Agora ligue-se a base de dados com 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;
}

Desliga a base de Dados

Assim que terminares as operações da base de dados, fecha a ligação.
// disconnect database
public void disconnect() {
    if (connection != null) {
        try {
            connection.close();
            connection = null;
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Tudo junto

Utilize esta classe MysqlConnect directamente após a alteração do nome da base de dados, nome de utilizador 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.cj.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 utilizar?

Inicializar a classe de base de dados.
// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();

Algures no teu 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();
}
Isto é tudo. :) Se alguma coisa melhorar edite-o! Espero que isto seja útil.
 43
Author: Madan Sapkota, 2019-12-07 03:06:14
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);
 25
Author: heffaklump, 2010-05-15 07:43:10
Aqui está o mínimo que precisa para obter dados de uma base de dados 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();

Adicionar tratamento de excepções, configuração, etc. provar.

 12
Author: Kilian Foth, 2010-05-15 07:48:24
MySQL JDBC Connection with 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);
}
 3
Author: AJC, 2017-09-18 15:02:34
Tens de ter o frasco do conector mysql no teu Fecho.

Na API Java JDBC faz tudo com bases de dados. usando o JDBC podemos escrever aplicações Java para
1. Enviar as consultas ou actualizar o SQL para DB(qualquer base de dados relacional) 2. Obter e processar os resultados de DB

Com três passos abaixo, podemos recuperar dados de qualquer base de dados.
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");
}
 2
Author: kapil das, 2013-08-15 13:56:23

Poderá ver todos os passos para ligar a base de dados MySQL a partir da aplicação Java Aqui . Para outro banco de dados, você só precisa mudar o driver apenas no primeiro passo. Por favor, certifique-se de que fornece o caminho certo para a base de dados e corrige o nome de utilizador e a senha.

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

 2
Author: Jwalant, 2017-02-13 06:15:03
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 servidor SQL 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();
}
 2
Author: KhiLan PaTeL, 2019-12-10 13:02:07

Connection eu estava usando algum tempo atrás, parecia a maneira mais fácil, mas também havia recomendações 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 do género: Provavelmente há algum caso, enquanto getConnection pode voltar.null :)
 1
Author: xxxvodnikxxx, 2015-05-28 09:50:13
COMO
  • para configurar o condutor para fazer uma amostra rápida
1. Go to https://dev.mysql.com/downloads/connector/j/, get the latest version of Connector/J

2. Remember to set the classpath to include the path of the connector jar file.
If we don't set it correctly, below errors can occur:

No suitable driver found for jdbc:mysql://127.0.0.1:3306/msystem_development

java.lang.ClassNotFoundException: com.mysql.jdbc:Driver
  • para montar o CLASPATH

Método 1: definir a variável CLASPATH.

export CLASSPATH=".:mysql-connector-java-VERSION.jar"
java MyClassFile

No comando acima, configurei o fecho para a pasta actual e para a versão mysql-connector-java.jar file. Assim, quando o comando java MyClassFile for executado, o lançador de aplicações java irá tentar carregar toda a classe Java no CLASSSPATH. E descobriu que os erros de BOOM tinham desaparecido.

Método 2:

java -cp .:mysql-connector-java-VERSION.jar MyClassFile

Nota: Classe.forName ("com.versao.jdbc.Driver"); This is depreciated at this moment 2019 Apr.

Espero que isto possa ajudar alguém!
 1
Author: Nhat Dinh, 2019-04-24 13:12:00
Ligação MySql JDBC:
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");  
 -1
Author: Sarat Chandra, 2017-01-09 17:13:16

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;
    }
}
 -1
Author: Corrupted_S.K, 2017-09-17 11:21:34

Obter O controlador JDBC

Ligação de transferência (seleccionar plataforma independente): https://dev.mysql.com/downloads/connector/j/

Mover o controlador JDBC para a unidade C

Abre os ficheiros e passa para C:\ drive. O seu caminho do condutor deve ser como C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19

Executar O Seu Java

java -cp "C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19.jar" testMySQL.java

TestMySQL.java

import java.sql.*;
import java.io.*;

public class testMySQL {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
        try
        {  
            Class.forName("com.mysql.cj.jdbc.Driver");  
            Connection con=DriverManager.getConnection(  
                "jdbc:mysql://localhost:3306/db?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","root","");  
            Statement stmt=con.createStatement();  
            ResultSet rs=stmt.executeQuery("show databases;");  
            System.out.println("Connected");  
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

    }  

}

enter image description here

 -1
Author: Chew Zai, 2020-02-22 11:29:16