Verbind Java met een MySQL-database

Hoe maak je verbinding met een MySQL-database in Java?

Als ik het probeer, krijg ik

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)

Of

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

Of

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

Antwoord 1, autoriteit 100%

DriverManageris een vrij oude manier om dingen te doen. De betere manier is om een ​​DataSourcete krijgen, ofwel door er een op te zoeken die uw app-servercontainer al voor u heeft geconfigureerd:

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

of direct een instantie maken en configureren vanuit uw databasestuurprogramma:

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

en verkrijg er dan verbindingen van, hetzelfde als hierboven:

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

Antwoord 2, autoriteit 92%

Hier is een stapsgewijze uitleg hoe MySQL en JDBC te installeren en te gebruiken:

  1. Downloaden installeer de MySQL-server. Doe het gewoon op de gebruikelijke manier. Onthoud het poortnummer wanneer u het hebt gewijzigd. Het is standaard 3306.

  2. Downloadhet JDBC-stuurprogramma en plaats het in classpath, pak het ZIP-bestand uit en plaats het bijbehorende JAR-bestand in het klassenpad. De leverancierspecifieke JDBC-driver is een concrete implementatie van de JDBC API(tutorial hier).

    Als u een IDE zoals Eclipse of Netbeans gebruikt, kunt u deze toevoegen aan het klassenpad door het JAR-bestand als Bibliotheektoe te voegen aan het Build Pathin de project’s eigendommen.

    Als je het “plain vanilla” doet in de opdrachtconsole, moet je het pad naar het JAR-bestand specificeren in de -cpof -classpathargument bij het uitvoeren van uw Java-toepassing.

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

    De .is er alleen om de huidigemap ook aan het klassenpad toe te voegen, zodat het com.example.YourClassen de ;is het scheidingsteken voor klassenpaden zoals in Windows. In Unix en klonen moet :worden gebruikt.

  3. Maak een databasein MySQL. Laten we een database javabasemaken. Je wilt natuurlijk Wereldheerschappij, dus laten we ook UTF-8 gebruiken.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Een gebruiker makenvoor Java en verleenhet toegang. Simpelweg omdat het gebruik van rooteen slechte gewoonte is.

    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    

    Ja, javais de gebruikersnaam en passwordis hier het wachtwoord.

  5. Bepaalde JDBC-URL. Om de MySQL-database met Java te verbinden, hebt u een JDBC-URL nodig in de volgende syntaxis:

    jdbc:mysql://hostnaam:poort/databasenaam
    • hostname: de hostnaam waarop de MySQL-server is geïnstalleerd. Als het is geïnstalleerd op dezelfde machine waarop u de Java-code uitvoert, kunt u gewoon localhostgebruiken. Het kan ook een IP-adres zijn zoals 127.0.0.1. Als je verbindingsproblemen tegenkomt en het gebruik van 127.0.0.1in plaats van localhostdit heeft opgelost, dan heb je een probleem in je netwerk/DNS/hosts-configuratie.

    • port: de TCP/IP-poort waarop de MySQL-server luistert. Dit is standaard 3306.

    • databasename: de naam van de database waarmee u verbinding wilt maken. Dat is javabase.

    Dus de uiteindelijke URL zou er als volgt uit moeten zien:

    jdbc:mysql://localhost:3306/javabase
  6. Test de verbindingmet MySQL met behulp van Java. Maak een eenvoudige Java-klasse met een main()-methode om de verbinding te testen.

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

    Als u een SQLException: No suitable driverkrijgt, betekent dit dat het JDBC-stuurprogramma helemaal niet automatisch is geladen of dat de JDBC-URL verkeerd is (dwz dat het door geen enkele van de geladen stuurprogramma’s). Normaal gesproken moet een JDBC 4.0-stuurprogramma automatisch worden geladen wanneer u het gewoon in het runtime-klassenpad plaatst. Om een ​​en ander uit te sluiten, kunt u het altijd handmatig laden zoals hieronder:

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

    Houd er rekening mee dat de newInstance()-aanroep hier nietnodig is. Het is alleen om de oude en buggy org.gjt.mm.mysql.Driverte repareren. Hier uitleg. Als deze regel ClassNotFoundExceptiongenereert, wordt het JAR-bestand met de JDBC-stuurprogrammaklasse eenvoudigweg niet in het klassenpad geplaatst.

    Houd er rekening mee dat u het stuurprogramma niet elke keervoordatverbinding hoeft te maken. Slechts één keer tijdens het opstarten van de applicatie is voldoende.

    Als u een SQLException: Connection refusedof Connection timed outof een MySQL-specifieke CommunicationsException:
    Communications link failure
    , dan betekent dit dat de database helemaal niet bereikbaar is. Dit kan een of meer van de volgende oorzaken hebben:

    1. IP-adres of hostnaam in JDBC-URL is verkeerd.
    2. Hostnaam in JDBC-URL wordt niet herkend door lokale DNS-server.
    3. Poortnummer ontbreekt of is verkeerd in JDBC-URL.
    4. DB-server is uitgevallen.
    5. DB-server accepteert geen TCP/IP-verbindingen.
    6. DB-server heeft geen verbindingen meer.
    7. Iets tussen Java en DB blokkeert verbindingen, b.v. een firewall of proxy.

    Volg de volgende adviezen om het een of het ander op te lossen:

    1. Verifieer en test ze met ping.
    2. Vernieuw DNS of gebruik in plaats daarvan IP-adres in JDBC-URL.
    3. Verifieer het op basis van my.cnfvan MySQL DB.
    4. Start de database.
    5. Controleer of mysqld is gestart zonder de optie --skip-networking option.
    6. Start de database opnieuw en corrigeer uw code dienovereenkomstig zodat de verbindingen in finallyworden gesloten.
    7. Schakel firewall uit en/of configureer firewall/proxy om de poort toe te staan/door te sturen.

    Houd er rekening mee dat het sluiten van de Connectionuiterstbelangrijk is. Als u geen verbindingen verbreekt en er in korte tijd veel van krijgt, kan de database zonder verbindingen komen te zitten en kan uw toepassing kapot gaan. Verkrijg altijd de Connectionin een try-with-resourcesverklaring. Of als je Java 7 nog niet gebruikt, sluit het dan expliciet in finallyvan een try-finally-blok. Sluiten finallyis alleen maar om ervoor te zorgen dat het ook wordt gesloten in geval van een uitzondering. Dit geldt ook voor Statement, PreparedStatementen ResultSet.

Dat was het wat betreft connectiviteit. Je kunt hiereen meer geavanceerde tutorial vinden over het laden en sla volwaardige Java-modelobjecten op in een database met behulp van een standaard DAO-klasse.


Het gebruik van een Singleton-patroon voor de DB-verbinding is een slechte benadering. Zie onder andere: http://stackoverflow.com/q/9428573/. Dit is een #1 beginnersfout.


Antwoord 3, autoriteit 21%

Initialiseer databaseconstanten

Creëer constante eigenschappen database gebruikersnaam, wachtwoord, URL en stuurprogramma’s, pollinglimiet enz.

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

Verbinding en eigenschappen initialiseren

Zodra de verbinding tot stand is gebracht, is het beter om deze op te slaan voor hergebruik.

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

Eigenschappen maken

Het eigenschappenobject bevat de verbindingsinformatie, controleer of deze al is ingesteld.

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

Verbind de database

Maak nu verbinding met de database met behulp van de geïnitialiseerde constanten en eigenschappen.

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

Verbreek de verbinding met de database

Als u klaar bent met databasebewerkingen, sluit u gewoon de verbinding.

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

Alles bij elkaar

Gebruik deze klasse MysqlConnectdirect na het wijzigen van database_name, gebruikersnaam en wachtwoord enz.

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();
            }
        }
    }
}

Hoe te gebruiken?

Initialiseer de databaseklasse.

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

Ergens anders in uw code …

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();
}

Dit is alles 🙂Als er iets is om het te verbeteren, bewerk het dan! Ik hoop dat dit nuttig is.


Antwoord 4, autoriteit 12%

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);

Antwoord 5, autoriteit 5%

Dit is het minimale dat u nodig hebt om gegevens uit een MySQL-database te halen:

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();

Voeg uitzonderingsbehandeling, configuratie enz. naar smaak toe.


Antwoord 6

je moet mysql connector jar in je classpath hebben.

in Java JDBC API maakt alles met databases. met JDBC kunnen we Java-applicaties schrijven naar
1. Verzend query’s of update SQL naar DB (elke relationele database)
2. Ophalen en verwerken van de resultaten uit DB

met onderstaande drie stappen kunnen we gegevens ophalen uit elke 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");
}

Antwoord 7

U kunt alle stappen zien om de MySQL-database te verbinden vanuit de Java-toepassing hier. Voor andere databases hoeft u alleen in de eerste stap het stuurprogramma te wijzigen. Zorg ervoor dat u het juiste pad naar de database en de juiste gebruikersnaam en wachtwoord opgeeft.

Bezoek http://apekshit.com/t/ 51/Steps-to-connect-Database-met-JAVA


Antwoord 8

MySQL JDBC-verbinding met 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);
}

Antwoord 9

Korte en zoete code.

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();
}

Voor 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();
}

Antwoord 10

Connectiondie ik enige tijd geleden gebruikte, het leek de gemakkelijkste manier, maar er waren ook aanbevelingen om daar een if-statement te maken – precies

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

Of zoiets 🙂

Waarschijnlijk is er een geval, terwijl getConnectionnullkan retourneren 🙂


Antwoord 11

HOE

  • Het stuurprogramma instellen om een ​​snel voorbeeld uit te voeren
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
  • De CLASSPATH instellen

Methode 1: stel de CLASSPATH-variabele in.

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

In de bovenstaande opdracht heb ik CLASSPATH ingesteld op de huidige map en het bestand mysql-connector-java-VERSION.jar. Dus wanneer de opdracht java MyClassFilewordt uitgevoerd, zal de Java Application Launcher proberen alle Java-klassen in CLASSPATH te laden.
En het vond de klasse Drive=> BOOM-fouten waren verdwenen.

Methode 2:

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

Opmerking: Class.forName(“com.mysql.jdbc.Driver”); Dit is beëindigd op dit moment 2019 april.

Ik hoop dat dit iemand kan helpen!


Antwoord 12

MySql JDBC-verbinding:

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");  

Antwoord 13

Korte code

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

Antwoord 14

JDBC-stuurprogramma downloaden

Downloadlink (selecteer platformonafhankelijk): https://dev.mysql.com/ downloads/connector/j/

Verplaats JDBC-stuurprogramma naar C-schijf

Pak de bestanden uit en ga naar station C:\. Uw driverpad moet zijn als C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19

Voer uw Java uit

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

voer hier de afbeeldingsbeschrijving in

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes