Databáze v Javě

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Přepracována struktura.)
(Navázání spojení: Přidáno SQLite.)
 
(Nejsou zobrazeny 2 mezilehlé verze od 1 uživatele.)
Řádka 3: Řádka 3:
  
 
== Jaké databázové stroje podporuje Java? ==
 
== Jaké databázové stroje podporuje Java? ==
* <code>JavaDB</code> &mdash; databázový stroj je součástí JDK.
 
* Libovolná DB, podporující standard <code>JDBC</code> (například MySQL).
 
* Libovolná DB podporující obecný standard <code>ODBC</code> (Open DataBase Connectivity).
 
  
 
=== JavaDB ===
 
=== JavaDB ===
 +
* Databázový stroj je součástí JDK.
 
* Oraclem podporovaná distribuce databáze Apache Derby (opensource).
 
* Oraclem podporovaná distribuce databáze Apache Derby (opensource).
 
* Lze používat v režimu client-server.
 
* Lze používat v režimu client-server.
Řádka 13: Řádka 11:
 
* Rozhraní: jazyk SQL.
 
* Rozhraní: jazyk SQL.
 
* Vestavěný ovladač pro JDBC.
 
* Vestavěný ovladač pro JDBC.
 +
 +
=== JDBC (Java DataBase Connectivity) ===
 +
* Libovolná DB, podporující standard <code>JDBC</code>.
 +
* Existují ovladače JDBC pro komunikaci s: MySQL, SQLite,...
 +
 +
=== ODBC (Open DataBaseConnectivity) ===
 +
* Obecný standard pro komunikaci mezi aplikacemi a&nbsp;databázemi.
  
  
Řádka 51: Řádka 56:
  
 
* Pravé tlačítko na projekt &rarr; Properties &rarr; Libraries &rarr; Add Library...
 
* Pravé tlačítko na projekt &rarr; Properties &rarr; Libraries &rarr; Add Library...
* V Global Libraries vyberte: <code>MySQL JDBC Driver</code>.
+
* V Global Libraries vyberte:
 +
** Pro MySQL JDBC: <code>MySQL JDBC Driver</code>.
 +
** Pro SQLite JDBC: <code>SQLite Driver</code>.
  
; Pokud ovladač v seznamu není, můžete ovladač přidat ručně:
+
; Pokud ovladač v seznamu není, můžete ovladač přidat ručně (uvádíme variantu pro MySQL):
 
* Stáhněte ovladač ručně z: [http://www.mysql.com/downloads/connector/j/ MySQL.com &rarr; Connector/J]
 
* Stáhněte ovladač ručně z: [http://www.mysql.com/downloads/connector/j/ MySQL.com &rarr; Connector/J]
 
* Rozbalte archiv s ovladačem, stačí vám balíček JAR.
 
* Rozbalte archiv s ovladačem, stačí vám balíček JAR.
Řádka 59: Řádka 66:
 
* <code>Project Properties &rarr; Libraries &rarr; Add JAR File</code>
 
* <code>Project Properties &rarr; Libraries &rarr; Add JAR File</code>
 
* Vyberte soubor: <code>mysql-connector-java...jar</code>
 
* Vyberte soubor: <code>mysql-connector-java...jar</code>
 
  
 
== Práce s JDBC ==
 
== Práce s JDBC ==
Řádka 70: Řádka 76:
  
 
=== Navázání spojení ===
 
=== Navázání spojení ===
*Ověř přítomnost ovladače:
+
; Ověř přítomnost ovladače
**Třída: <tt>com.mysql.jdbc.Connection</tt>
+
 
  Class.forName("com.mysql.jdbc.Connection");
 
  Class.forName("com.mysql.jdbc.Connection");
*Pokud ovladač není propojen, vyhodí: <tt>ClassNotFoundException</tt>
+
* resp. pro SQLite ''(Pozor na velikost písmen!!!):''
 +
Class.forName("org.sqlite.JDBC");
 +
*Pokud ovladač není propojen, vyhodí: <tt>ClassNotFoundException</tt>.
 +
 
 +
; A proveď připojení k databázi
 +
* MySQL:
 
  String url = "jdbc:mysql://" + ''adresa-serveru'' + "/" + ''název-databáze''";
 
  String url = "jdbc:mysql://" + ''adresa-serveru'' + "/" + ''název-databáze''";
 
  Connection con = DriverManager.getConnection(url, ''userDB'', ''passDB'');
 
  Connection con = DriverManager.getConnection(url, ''userDB'', ''passDB'');
 +
* SQLite:
 +
String cestaKSouboru = "soubor.db";
 +
Connection con = DriverManager.getConnection("jdbc:sqlite:"+cestaKSouboru);
 
* Vyhodí <tt>java.sql.SQLException</tt> při chybě připojení
 
* Vyhodí <tt>java.sql.SQLException</tt> při chybě připojení
 +
 
; Příklad kódu:
 
; Příklad kódu:
 
<div class="Priklad">
 
<div class="Priklad">

Aktuální verze z 19. 11. 2018, 12:10


Obsah

Jaké databázové stroje podporuje Java?

JavaDB

JDBC (Java DataBase Connectivity)

ODBC (Open DataBaseConnectivity)


API pro práci s databází

JDBC — The Java Database Connectivity
Java Data Objects (JDO)


Ověření/ruční připojení k serveru

Většina databázových serverů nepodporuje připojení z dálky!

Na vlastním serveru můžete pro konfiguraci nastavení přístupu z dálky použít návod: Vzdálený přístup k databázi.


Zařazení ovladače JDBC do projektu (NetBeans 8)

Pokud ovladač v seznamu není, můžete ovladač přidat ručně (uvádíme variantu pro MySQL)

Práce s JDBC

Import tříd

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

Navázání spojení

Ověř přítomnost ovladače
Class.forName("com.mysql.jdbc.Connection");
Class.forName("org.sqlite.JDBC");
A proveď připojení k databázi
String url = "jdbc:mysql://" + adresa-serveru + "/" + název-databáze";
Connection con = DriverManager.getConnection(url, userDB, passDB);
String cestaKSouboru = "soubor.db";
Connection con = DriverManager.getConnection("jdbc:sqlite:"+cestaKSouboru);
Příklad kódu
// Zkontrolujeme instalaci ovladače
try {
    Class.forName("com.mysql.jdbc.Connection");
} catch (ClassNotFoundException ex) { 
    JOptionPane.showMessageDialog( 
            null, 
            "Ovladač databáze není správně zahrnut do projektu! Nenalezena třída: "+ ex.getMessage()+"!", 
            "Chyba ovladače JDBC", 
            JOptionPane.ERROR_MESSAGE); 
    System.exit(1); 
} 

// Připojíme se
String host = "192.168.1.1"; // IP databázového stroje nebo doménové jméno 
String nazevDatabaze = "programovani"; 
String userDB = "progoa"; 
String passDB = "progoauh"; 
String url = "jdbc:mysql://" + host + "/" + nazevDatabaze; 

Connection con = null; 
try {
    con = DriverManager.getConnection(url, userDB, passDB); 
} catch (SQLException ex) { 
    JOptionPane.showMessageDialog( 
            null, 
            "Chyba při otevření spojení s s databází:"+ ex.getMessage(), 
            "Chyba spojení s databází", JOptionPane.ERROR_MESSAGE); 
    System.exit(1); 
}

Pro připojení v rámci jednoho počítače můžeme použít pojmenovanou rouru (named pipe). Touto variantou se zde nebudeme zabývat.

Vytvoření dotazu

java.sql.Statement con.createStatement();

Select

statement.executeQuery(String select);
ResultSet statement.getResultSet();

ResultSet

boolean rs.next()
String rs.getString(číslo sloupce nebo název sloupce jako String)
int rs.getInt(...)
...
while (rs.next()) { ... }

Update, Insert, Delete, DDL

statement.executeUpdate(String insert_etc)

Obecný dotaz

statement.execute(String sql)
Příklad kódu
        Statement st = null; 

        try { 
            st = con.createStatement(); 
            ResultSet rs = null; 
            rs = st.executeQuery("SELECT * FROM uzivatele"); 
            int pocetRadku = st.executeUpdate("INSERT INTO uzivatele VALUES ('karel', PASSWORD('x'));"); 
        } catch (SQLException ex) { 
            Logger.getLogger(DatabazePrvni.class.getName()).log(Level.SEVERE, null, ex); 
        } 

        if (con != null) { 
            try { 
                con.close(); 
            } catch (SQLException ex) { 
                Logger.getLogger(DatabazePrvni.class.getName()).log(Level.SEVERE, null, ex); 
            } 
        }

Uzavření spojení

con.isClosed()
con.close()


Zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje