sql >> Database teknologi >  >> RDS >> Mysql

Tilslut Java til en MySQL-database

Her er en trin for trin forklaring, hvordan du installerer MySQL og JDBC, og hvordan du bruger det:

  1. Download og installer MySQL-serveren . Bare gør det på den sædvanlige måde. Husk portnummeret, når du har ændret det. Det er som standard 3306 .

  2. Download JDBC-driveren og sæt i classpath , udpak ZIP-filen og læg den indeholdende JAR-fil i klassestien. Den leverandørspecifikke JDBC-driver er en konkret implementering af JDBC API (vejledning her ).

    Hvis du bruger en IDE som Eclipse eller Netbeans, kan du tilføje den til klassestien ved at tilføje JAR-filen som Bibliotek til Bygstien i projektets ejendomme.

    Hvis du gør det "plain vanilla" i kommandokonsollen, så skal du angive stien til JAR-filen i -cp eller -klassesti argument, når du udfører din Java-applikation.

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

    . er der bare for at tilføje den aktuelle bibliotek til klassestien, så den kan finde com.example.YourClass og ; er klassestiseparatoren, som den er i Windows. I Unix og kloner : skal bruges.

  3. Opret en database i MySQL . Lad os oprette en database javabase . Du vil selvfølgelig have verdensherredømme, så lad os også bruge UTF-8.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Opret en bruger til Java og tilskud det adgang . Simpelthen fordi du bruger root er en dårlig praksis.

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

    Ja, java er brugernavnet og adgangskoden er adgangskoden her.

  5. Bestem JDBC URL . For at forbinde MySQL-databasen ved hjælp af Java skal du bruge en JDBC URL i følgende syntaks:

    jdbc:mysql://hostname:port/databasename
    • værtsnavn :Værtsnavnet, hvor MySQL-serveren er installeret. Hvis det er installeret på den samme maskine, hvor du kører Java-koden, så kan du bare bruge localhost . Det kan også være en IP-adresse som 127.0.0.1 . Hvis du støder på forbindelsesproblemer og bruger 127.0.0.1 i stedet for localhost løst det, så har du et problem i din netværks-/DNS-/værtskonfiguration.

    • port :TCP/IP-porten, hvor MySQL-serveren lytter til. Dette er som standard 3306 .

    • databasenavn :Navnet på den database, du vil oprette forbindelse til. Det er javabase .

    Så den endelige URL skal se sådan ud:

    jdbc:mysql://localhost:3306/javabase
  6. Test forbindelsen til MySQL ved hjælp af Java . Opret en simpel Java-klasse med en main() metode til at teste forbindelsen.

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

    Hvis du får en SQLException:Ingen passende driver , så betyder det, at enten JDBC-driveren slet ikke blev automatisk indlæst, eller at JDBC-URL'en er forkert (dvs. den blev ikke genkendt af nogen af ​​de indlæste drivere). Normalt skal en JDBC 4.0-driver automatisk indlæses, når du bare slipper den i runtime classpath. For at udelukke én og anden, kan du altid indlæse den manuelt som nedenfor:

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

    Bemærk, at newInstance() opkaldet er ikke brug for her. Det er bare at rette den gamle og fejlbehæftede org.gjt.mm.mysql.Driver . Forklaring her . Hvis denne linje kaster ClassNotFoundException , så er JAR-filen, der indeholder JDBC-driverklassen, simpelthen ikke placeret i klassestien.

    Bemærk, at du ikke behøver at indlæse driveren hver gang før Tilslutning. Kun én gang under applikationsstart er nok.

    Hvis du får en SQLException:Forbindelse nægtet eller Forbindelsen fik timeout eller en MySQL-specifik CommunicationsException:Communications link failure , så betyder det, at DB'en slet ikke er tilgængelig. Dette kan have en eller flere af følgende årsager:

    1. IP-adresse eller værtsnavn i JDBC URL er forkert.
    2. Værtsnavn i JDBC URL genkendes ikke af den lokale DNS-server.
    3. Portnummer mangler eller er forkert i JDBC URL.
    4. DB-serveren er nede.
    5. DB-serveren accepterer ikke TCP/IP-forbindelser.
    6. DB-serveren er løbet tør for forbindelser.
    7. Noget mellem Java og DB blokerer forbindelser, f.eks. en firewall eller proxy.

    For at løse det ene eller det andet, følg følgende råd:

    1. Bekræft og test dem med ping .
    2. Opdater DNS, eller brug IP-adressen i JDBC URL i stedet.
    3. Bekræft det baseret på my.cnf af MySQL DB.
    4. Start DB.
    5. Bekræft, om mysqld er startet uden --skip-netværksindstillingen .
    6. Genstart DB, og ret din kode i overensstemmelse hermed, så den lukker forbindelser i endelig .
    7. Deaktiver firewall og/eller konfigurer firewall/proxy for at tillade/viderestille porten.

    Bemærk, at lukke Forbindelsen er ekstremt vigtig. Hvis du ikke lukker forbindelser og bliver ved med at få mange af dem på kort tid, kan databasen løbe tør for forbindelser, og din applikation kan gå i stykker. Anskaf altid Forbindelsen i en prøv-med-ressourcer erklæring . Eller hvis du ikke er på Java 7 endnu, skal du udtrykkeligt lukke det i endelig af en forsøg endelig blok. Lukker endelig ind er bare for at sikre, at den også bliver lukket i tilfælde af en undtagelse. Dette gælder også for Erklæring , PreparedStatement og Resultatsæt .

Det var det, hvad forbindelsen angår. Du kan finde her en mere avanceret vejledning i, hvordan man indlæser og gemmer fuldværdige Java-modelobjekter i en database ved hjælp af en grundlæggende DAO-klasse.

At bruge et Singleton-mønster til DB-forbindelsen er en dårlig tilgang. Se blandt andre spørgsmål:http://stackoverflow.com/q/9428573/ . Dette er en #1 starter fejl.



  1. Sådan automatiseres dataindsamling på SQL Server-databasevækst

  2. Kombination af INSERT-sætninger i en datamodificerende CTE med et CASE-udtryk

  3. Samle mellem tabeller i to forskellige databaser?

  4. SQL count(*) ydeevne