sql >> Databasteknik >  >> RDS >> Mysql

Anslut Java till en MySQL-databas

Här är en steg för steg förklaring hur man installerar MySQL och JDBC och hur man använder det:

  1. Ladda ner och installera MySQL-servern . Gör det som vanligt. Kom ihåg portnumret när du har ändrat det. Det är som standard 3306 .

  2. Ladda ner JDBC-drivrutinen och lägg i classpath , extrahera ZIP-filen och lägg den innehållande JAR-filen i klasssökvägen. Den leverantörsspecifika JDBC-drivrutinen är en konkret implementering av JDBC API (handledning här ).

    Om du använder en IDE som Eclipse eller Netbeans kan du lägga till den i klasssökvägen genom att lägga till JAR-filen som Bibliotek till byggvägen i projektets fastigheter.

    Om du gör det "vanlig vanilj" i kommandokonsolen, måste du ange sökvägen till JAR-filen i -cp eller -classpath argument när du kör din Java-applikation.

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

    . är bara där för att lägga till den aktuella katalogen till klasssökvägen också så att den kan hitta com.example.YourClass och ; är klassvägseparatorn som den är i Windows. I Unix och kloner : bör användas.

  3. Skapa en databas i MySQL . Låt oss skapa en databas javabase . Du vill naturligtvis ha världsherravälde, så låt oss använda UTF-8 också.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Skapa en användare för Java och bevilja åtkomst till det . Helt enkelt för att du använder root är en dålig praxis.

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

    Ja, java är användarnamnet och password är lösenordet här.

  5. Bestämma JDBC URL . För att ansluta MySQL-databasen med Java behöver du en JDBC URL i följande syntax:

    jdbc:mysql://hostname:port/databasename
    • hostname :Värdnamnet där MySQL-servern är installerad. Om det är installerat på samma maskin som du kör Java-koden kan du bara använda localhost . Det kan också vara en IP-adress som 127.0.0.1 . Om du stöter på anslutningsproblem och använder 127.0.0.1 istället för localhost löst det, då har du ett problem i din nätverks-/DNS-/värdkonfiguration.

    • port :TCP/IP-porten där MySQL-servern lyssnar på. Detta är som standard 3306 .

    • databasename :Namnet på databasen du vill ansluta till. Det är javabase .

    Så den slutliga webbadressen bör se ut så här:

    jdbc:mysql://localhost:3306/javabase
  6. Testa anslutningen till MySQL med Java . Skapa en enkel Java-klass med en main() metod för att testa anslutningen.

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

    Om du får en SQLException: No suitable driver , då betyder det att antingen JDBC-drivrutinen inte laddades automatiskt alls eller att JDBC-URL:n är fel (dvs. den kändes inte igen av någon av de inlästa drivrutinerna). Normalt bör en JDBC 4.0-drivrutin laddas automatiskt när du bara släpper den i runtime classpath. För att utesluta en och annan kan du alltid ladda den manuellt enligt nedan:

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

    Observera att newInstance() samtalet är inte behövs här. Det är bara att fixa den gamla och buggiga org.gjt.mm.mysql.Driver . Förklaring här . Om den här raden kastar ClassNotFoundException , så har JAR-filen som innehåller JDBC-drivrutinsklassen helt enkelt inte placerats i klasssökvägen.

    Observera att du inte behöver ladda drivrutinen varje gång före ansluter. Bara en gång under programmets start räcker.

    Om du får en SQLException: Connection refused eller Connection timed out eller en MySQL-specifik CommunicationsException: Communications link failure , då betyder det att DB inte är tillgänglig alls. Detta kan ha en eller flera av följande orsaker:

    1. IP-adress eller värdnamn i JDBC URL är fel.
    2. Värdnamn i JDBC URL känns inte igen av den lokala DNS-servern.
    3. Portnummer saknas eller är fel i JDBC URL.
    4. DB-servern är nere.
    5. DB-servern accepterar inte TCP/IP-anslutningar.
    6. DB-servern har slut på anslutningar.
    7. Något mellan Java och DB blockerar anslutningar, t.ex. en brandvägg eller proxy.

    För att lösa det ena eller det andra, följ följande råd:

    1. Verifiera och testa dem med ping .
    2. Uppdatera DNS eller använd IP-adressen i JDBC URL istället.
    3. Verifiera det baserat på my.cnf av MySQL DB.
    4. Starta DB.
    5. Verifiera om mysqld har startat utan alternativet --skip-networking option .
    6. Starta om DB och fixa din kod så att den stänger anslutningarna finally .
    7. Inaktivera brandvägg och/eller konfigurera brandvägg/proxy för att tillåta/vidarebefordra porten.

    Observera att när du stänger Connection är extremt Viktig. Om du inte stänger anslutningar och fortsätter att få många av dem på kort tid, kan databasen få slut på anslutningar och din applikation kan gå sönder. Skaffa alltid Connection i en try-with-resources uttalande . Eller om du inte använder Java 7 än, stäng det uttryckligen i finally av en try-finally blockera. Stängs finally är bara för att se till att den stängs också i händelse av ett undantag. Detta gäller även Statement , PreparedStatement och ResultSet .

Det var det när det gäller anslutningen. Du hittar här en mer avancerad handledning hur man laddar och lagrar fullvärdiga Java-modellobjekt i en databas med hjälp av en grundläggande DAO-klass.

Att använda ett Singleton-mönster för DB-anslutningen är ett dåligt tillvägagångssätt. Se bland andra frågor:http://stackoverflow.com/q/9428573/ . Det här är ett första misstag för första gången.



  1. Vad är det bästa sättet att lagra koordinater (longitud/latitud, från Google Maps) i SQL Server?

  2. SQLAlchemy, Psychopg2 och Postgresql COPY

  3. Hur kan jag schemalägga ett jobb för att köra en SQL-fråga dagligen?

  4. Oracle XML :Hoppa över Finns inte nod