Databáze v Javě
Z MiS
(Rozdíly mezi verzemi)
m (→JavaDB: Upřesnění.) |
m (→Instalace ovladače JDBC: Drobné úpravy.) |
||
| Řádka 37: | Řádka 37: | ||
== Instalace ovladače JDBC == | == Instalace ovladače JDBC == | ||
| − | + | <div class="Varovani"> | |
| + | Většina databázových serverů nepodporuje připojení z dálky! | ||
| − | === Stažení ovladačů === | + | Konfigurace nastavení přístupu z dálky na serveru je pro MySQL na: [[Vzdálený přístup k databázi]]. |
| + | </div> | ||
| + | |||
| + | === Stažení ovladačů (pouze NetBeans verze nižší než 8) === | ||
<div class="Poznamka">V NetBeans verze 8 je ovladač již předinstalován, není tedy třeba stahovat.</div> | <div class="Poznamka">V NetBeans verze 8 je ovladač již předinstalován, není tedy třeba stahovat.</div> | ||
* Pro MySQL [http://www.mysql.com/downloads/connector/j/ Connector/J]. | * Pro MySQL [http://www.mysql.com/downloads/connector/j/ Connector/J]. | ||
| Řádka 60: | Řádka 64: | ||
**Pravé tlačítko -> Connect Usign... | **Pravé tlačítko -> Connect Usign... | ||
**V Services se vytvoří připojení, pomocí něj mohu editovat tabulky atd. | **V Services se vytvoří připojení, pomocí něj mohu editovat tabulky atd. | ||
| − | |||
== Práce s JDBC == | == Práce s JDBC == | ||
Verze z 14. 9. 2015, 11:25
Obsah |
Jaké databázové stroje podporuje Java?
-
JavaDB— databázový stroj je součástí JDK. - Libovolná DB, podporující standard
JDBC(například MySQL). - Libovolná DB podporující standard
ODBC.
JavaDB
- Oraclem podporovaná distribuce databáze Apache Derby (opensource).
- Lze používat v režimu client-server.
- Jedná se o transakční databázi.
- Rozhraní: jazyk SQL.
- Vestavěný ovladač pro JDBC.
API pro práci s databází
JDBC — The Java Database Connectivity
- Průmyslový standard pro propojení aplikací Javy s SQL databází, tabulkovými daty, soubory.
- Implementace připojení k databázi pro Javu: obecné propojení na SQL databázi
- Realizována ovladačem pro konkrétní databázový stroj.
- JDBC-ODBC Bridge Driver
- Ovladač pro databáze standardu ODBC.
Java Data Objects (JDO)
- Implementace uložení dat (persistence)
- Uložení objektů do databáze.
- Existují opensource i komerční implementace.
- Příklad implemetace: Speedo
- nekomerční
- Podporuje relační databáze.
- Aktuálně (2014) implementuje JDO 1.0.1, plánuje se podpora JDO 2.0.
Standard ODBC
- Open DataBase Connectivity
- Obecný protokol pro připojení k databázi
Instalace ovladače JDBC
Většina databázových serverů nepodporuje připojení z dálky!
Konfigurace nastavení přístupu z dálky na serveru je pro MySQL na: Vzdálený přístup k databázi.
Stažení ovladačů (pouze NetBeans verze nižší než 8)
V NetBeans verze 8 je ovladač již předinstalován, není tedy třeba stahovat.
- Pro MySQL Connector/J.
- zazipováno včetně dokumentace
- nám stačí balíček JAR
Zařazení ovladače do projektu
- Pro JDK
- Pro NetBeans
- Stáhnout: <http://www.linglom.com/2007/12/05/accessing-mysql-on-netbeans-using-jdbc-part-i-create-a-connection/>
- Rozbalit
- Soubor .JAR zkopírovat do složky lib v rámci projektu
- Zařazení ovladače:
- pravé tlačítko na projekt → Properties → Libraries → Add JAR File
- Najít mysql-connector-java....jar v lib.
- Ověření/ruční připojení
- Záložka Services (vedle stromu projektu)-> Databases-> Drivers
- Vybrat nebo přidat Connector/J
- Pravé tlačítko -> Connect Usign...
- V Services se vytvoří připojení, pomocí něj mohu editovat tabulky atd.
Práce s JDBC
Třídy
- import java.sql.Connection;
- Reprezentuje připojení k databázi.
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- Ověř přítomnost ovladače:
- Třída: com.mysql.jdbc.Connection
- Class.forName("com.mysql.jdbc.Connection");
- throws ClassNotFoundException
- Ovladač musí být přidán do projektu!
- Varianta TCP/IP
- Obecné, lze se připojit ke vzdálenému serveru.
- String url = "jdbc:mysql://" + host + "/" + database;
- Connection con = DriverManager.getConnection(url, userDB, passDB);
- java.sql.SQLException při chybě připojení
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);
}
- Varianta s využitím pojmenované roury (named pipe)
- Pouze pro připojení v rámci jednoho serveru.
- Efektivnější varianta, ne vždy použitelná.
con = DriverManager.getConnection("jdbc:mysql:///test" + "?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory", "uzivatel", "heslo");
Dotazy
- → viz třída Statement
Uzavření spojení
- con.isClosed()
- con.close()
- SQLException pokud se nepodaří
Zdroje
Dotazy v JDBC
- Realizuje třída Statement
Vytvoření dotazu
java.sql.Statement con.createStatement();
- SQLException při chybě přístupu k databázi
Select
statement.executeQuery(String select);
- Výsledky získáme
ResultSet statement.getResultSet();
ResultSet
- návratová hodnota
- každým dalším provedeným dotazem se předchozí smaže
- boolean rs.next()
- na začátku před první položkou
- každé volání posune na další položku
- vrací true, pokud další položka existuje
- Přístup k datům
String rs.getString(číslo sloupce nebo název sloupce jako String) int rs.getInt(...) ...
- Použití:
while (rs.next()) { ... }
Update, Insert, Delete, DDL
- statement.executeUpdate(String insert_etc)
- vrací int:
- 0 pro DDL
- počet změněných/vložených/smazaných řádků pro DML
- vrací int:
- SQLException při chybě při provádění dotazu
Obecný
statement.execute(String sql)
- vrací boolean
- výsledky můžeme získat dodatečně
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);
}
}