sql >> Databáze >  >> RDS >> Mysql

Připojte Javu k databázi MySQL

Zde je podrobné vysvětlení, jak nainstalovat MySQL a JDBC a jak je používat:

  1. Stáhnout a nainstalujte server MySQL . Prostě to udělejte obvyklým způsobem. Pamatujte si číslo portu, kdykoli ho změníte. Ve výchozím nastavení je to 3306 .

  2. Stáhnout ovladač JDBC a vložte classpath , rozbalte soubor ZIP a vložte soubor JAR, který obsahuje, do cesty ke třídě. Ovladač JDBC specifický pro dodavatele je konkrétní implementací JDBC API (výukový program zde ).

    Pokud používáte IDE jako Eclipse nebo Netbeans, můžete je přidat do cesty ke třídě přidáním souboru JAR jako Library na Cestu sestavení ve vlastnostech projektu.

    Pokud to děláte "plain vanilla" v příkazové konzoli, musíte zadat cestu k souboru JAR v -cp nebo -classpath argument při spouštění vaší Java aplikace.

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

    . je zde pouze k přidání aktuálního adresář také k cestě třídy, aby mohl najít com.example.YourClass a ; je oddělovač cesty třídy jako ve Windows. V Unixu a klonech : by měl být použit.

  3. Vytvořte databázi v MySQL . Vytvořme databázi javabase . Samozřejmě chcete světovou nadvládu, takže používejte také UTF-8.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Vytvořit uživatele pro Java a grant to přístup . Jednoduše proto, že používáte root je špatný postup.

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

    Ano, java je uživatelské jméno a password je heslo zde.

  5. Určit URL JDBC . Pro připojení databáze MySQL pomocí Javy potřebujete JDBC URL v následující syntaxi:

    jdbc:mysql://hostname:port/databasename
    • hostname :Název hostitele, kde je nainstalován server MySQL. Pokud je nainstalován na stejném počítači, kde spouštíte kód Java, stačí použít localhost . Může to být také adresa IP, například 127.0.0.1 . Pokud narazíte na problémy s připojením a používáte 127.0.0.1 místo localhost vyřešil, pak máte problém v konfiguraci sítě/DNS/hosts.

    • port :TCP/IP port, na kterém server MySQL naslouchá. Toto je ve výchozím nastavení 3306 .

    • databasename :Název databáze, ke které se chcete připojit. To je javabase .

    Cílová URL by tedy měla vypadat takto:

    jdbc:mysql://localhost:3306/javabase
  6. Otestovat připojení do MySQL pomocí Java . Vytvořte jednoduchou třídu Java s main() způsob testování připojení.

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

    Pokud získáte SQLException: No suitable driver , pak to znamená, že buď ovladač JDBC nebyl automaticky načten vůbec, nebo že adresa URL JDBC je chybná (tj. nebyla rozpoznána žádným z načtených ovladačů). Normálně by měl být ovladač JDBC 4.0 načten automaticky, když jej jednoduše pustíte do runtime classpath. Chcete-li vyloučit jeden nebo druhý, můžete je vždy ručně načíst, jak je uvedeno níže:

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

    Všimněte si, že newInstance() hovor není zde potřeba. Jde jen o opravu starého a zabugovaného org.gjt.mm.mysql.Driver . Vysvětlení zde . Pokud tento řádek vyvolá ClassNotFoundException , pak soubor JAR obsahující třídu ovladače JDBC jednoduše není umístěn do cesty třídy.

    Ovladač není nutné načítat pokaždé před spojovací. Stačí pouze jednou při spouštění aplikace.

    Pokud se zobrazí SQLException: Connection refused nebo Connection timed out nebo CommunicationsException: Communications link failure specifická pro MySQL , pak to znamená, že DB není vůbec dosažitelná. To může mít jednu nebo více z následujících příčin:

    1. IP adresa nebo název hostitele v adrese URL JDBC je nesprávná.
    2. Název hostitele v adrese URL JDBC není rozpoznán místním serverem DNS.
    3. Číslo portu v adrese URL JDBC chybí nebo je nesprávné.
    4. Server DB nefunguje.
    5. DB server nepřijímá připojení TCP/IP.
    6. Serveru DB došla připojení.
    7. Něco mezi Javou a DB blokuje připojení, např. firewall nebo proxy.

    Chcete-li vyřešit jedno nebo druhé, postupujte podle následujících rad:

    1. Ověřte a otestujte je pomocí ping .
    2. Obnovte DNS nebo místo toho použijte IP adresu v JDBC URL.
    3. Ověřte jej na základě my.cnf databáze MySQL.
    4. Spusťte DB.
    5. Ověřte, zda je mysqld spuštěno bez možnosti --skip-networking option .
    6. Restartujte DB a opravte svůj kód tak, aby finally uzavřel připojení .
    7. Zakažte bránu firewall a/nebo nakonfigurujte bránu firewall/proxy tak, aby povolila/předala port.

    Všimněte si, že zavřete Connection je extrémně Důležité. Pokud připojení neuzavřete a budete jich během krátké doby získávat mnoho, může databázi docházet připojení a vaše aplikace se může přerušit. Vždy získejte Connection v try-with-resources prohlášení . Nebo pokud ještě nepoužíváte Java 7, explicitně ji zavřete v finally z try-finally blok. Zavírá se za finally je jen zajistit, aby byl uzavřen i v případě výjimky. To platí také pro Statement , PreparedStatement a ResultSet .

To bylo, pokud jde o konektivitu. Najdete zde pokročilejší návod, jak načíst a uložit plnohodnotné objekty Java modelu do databáze pomocí základní třídy DAO.

Použití vzoru Singleton pro připojení DB je špatný přístup. Viz mimo jiné otázky:http://stackoverflow.com/q/9428573/ . Toto je chyba č. 1.



  1. Psaní dotazu pro více tabulek v php

  2. Každý výraz GROUP BY musí obsahovat alespoň jeden sloupec, který není vnějším odkazem

  3. Jak vložit zalomení řádku do řetězce SQL Server VARCHAR/NVARCHAR

  4. LIKE dotaz na prvky plochého pole jsonb