IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

5. diel - Derby DB - pripojenie cez DataSource

V minulej lekcii, Derby DB - Možnosti pripojenia , sme si predstavili rôzne možnosti pripojenia. V dnešnom tutoriále si predvedieme použitie DataSource na pripojenie Derby databázy.

Používaní DriverManager

Až doteraz sme pristupovali k databáze iba cez triedu DriverManager. DriverManager teda spravoval danej pripojenia. Toto je vhodné v prípade ojedinelých nepravidelných spojenia (napr. Desktop aplikácií).

try {
    connect = DriverManager.getConnection("jdbc:derby://localhost:1527/databaze01;"
        + "create=true;user=uzivatel1;password=heslo1");
    System.out.println("Podarilo se pripojit");
} catch (Exception e) {
    System.err.println("Nepodarilo se pripojit");
}

Používaní DataSource

Rozhranie DataSource prakticky rozširuje DriverManager a pridáva teda ďalšie funkcie. Umožňuje viac nastavení a ľahšie sa konfiguruje. Je súčasťou JDBC API od 2.0 a je teda novší ako DriverManager. Objekt DataSource sa konfiguruje väčšinou v aplikačnom serveri (v tomto článku je aplikačným serverom myslený každý server umožnujú spúšťať jednu alebo viac služieb z EE, napr. WildFly, JBoss, GlassFish, Payara aj Tomcat, a pod.), Čo umožňuje správcovi (administrátorovi) servera vykonávať nastavenie pripojenia (datasource) bez úpravy programu. Keď je DataSource rozhranie implementované v spolupráci s ConnectionPool­DataSource, všetky spojenia vytvorená inštancií DataSource sú automaticky začlenené do connection poolu (tzv. Skupiny spojenia), čím sa šetrí systémové zdroje. Podobne to funguje v spolupráci XADataSource, kde sú všetky spojenia použité pre distribuované transakcie.

Používanie objektu Datasource je veľmi rozšírené u aplikačným serverov a ojedinele aj u programových klientov. Objekt DataSource za nás rieši (spravuje) pripájanie. Podľa API sa jedná o rozhranie, ktoré si môžu implementovať triedy riešiace danú problematiku. Derby DB takými triedami odvodenými od DataSource disponuje. Doplňujúce informácie k DataSource u Derby DB nájdete v Administrator guide a v API.

  • org.apache.der­by.jdbc.Clien­tDataSource - Štandardné DataSource.
  • org.apache.der­by.jdbc.Clien­tConnectionPo­olDataSource - Vhodné pri používaní dopytovací medzipamäte (statement caching).

Ak budete používať Java Embended profile 2 používajte tieto triedy

  • org.apache.der­by.jdbc.Basic­ClientDataSou­rce40 - Štandardné DataSource.
  • org.apache.der­by.jdbc.Basic­ClientConnecti­onPoolDataSou­rce40 - Vhodné pri používaní dopytovací medzipamäte (statement caching).

Štandardné DataSource

Samozrejme možno DataSource nastaviť i bez aplikačného servera. Napríklad týmto spôsobom ak chcete používať DataSource v programovom klientovi.

...
org.apache.derby.jdbc.ClientDataSource dataSource = new org.apache.derby.jdbc.ClientDataSource();
dataSource.setDatabaseName("databaze03");
dataSource.setCreateDatabase("create");
dataSource.setUser("Uzivatel3");
dataSource.setPassword("Heslo3");
dataSource.setServerName("localhost");
dataSource.setPortNumber(1527);
java.sql.Connection connection = null;
try {
    connection = dataSource.getConnection();
    System.out.println("Podarilo se ziskat spojeni");
} catch (SQLException e) {
    System.out.println("Nepodarilo se ziskat spojeni");
    e.printStackTrace();
}
...

V prípade aplikačného servera s JNDI sa získava DataSource týmto spôsobom. Samozrejme je nutné pomenovať (identifikovať) v aplikačnom serveri daný DataSource. (napr. jdbc / mujDataSource). Nemal by byť problém získavať DataSource u aplikačných serverov cez @Resource (lookup = "jdbc / mujDataSource") skrz CDI.

...
javax.naming.Context context = new javax.naming.InitialContext ();
javax.sql.DataSource dataSource = (javax.sql.DataSource) context.lookup ("jdbc/mujDataSource");
java.sql.Connection connection = null;
try {
    connection = dataSource.getConnection ("Uzivatel3", "Heslo3");
    System.out.println("Podarilo se ziskat spojeni");
} catch (SQLException e) {
    System.out.println("Nepodarilo se ziskat spojeni");
    e.printStackTrace();
}
...

Príklad spojenia cez DataSource v SE

Vytvoríme si testovacie príklad ako Java SE projekt v IDE. Pridáme opäť externé knižnice do nášho projektu do CLASSPATH. Sú to:

  • derbyclient.jar
  • derbytools.jar
  • derbyoptional­tools.jar

Vytvorenie projektu a jeho nastavenie viz. "java/jdbc/derbydb/derby-db-pripojitelnost > predchádzajúcej lekcie. Opäť nezabudneme spustiť Derby Databázový server.

Pretože používame Javu SE, musíme si DataSource manuálne nastaviť. Samozrejme možno aj v SE nahrať DataSource cez JNDI a potom daný DataSource využívať v iný programoch na rovnakom JVM, ale tento kód by bol zložitejší ako príklad. V programe vidíme, že z DataSource získame objekt Connection as ním už samozrejme možné s databázou pracovať.

Projekt Derby cez DatSource - DerbyDb

Nižšie je uvedený zdrojový kód. Je úplne primitívne, rieši iba pripojenie cez DataSource a jeho odpojenie.

package sql;
import java.sql.*;
import org.apache.derby.jdbc.*;

public class ProjektDataSource {
    private static Connection connect = null;

    private static void pripojeniKDatabazi() {
        ClientDataSource dataSource = new ClientDataSource();
        dataSource.setDatabaseName("databaze03");
        dataSource.setCreateDatabase("create");
        dataSource.setUser("Uzivatel3");
        dataSource.setPassword("Heslo3");
        dataSource.setServerName("localhost");
        dataSource.setPortNumber(1527);
        try {
            connect = dataSource.getConnection();
            System.out.println("Podarilo se ziskat spojeni");
        } catch (SQLException e) {
            System.out.println("Nepodarilo se ziskat spojeni");
            e.printStackTrace();
        }
    }

    private static void odpojimeDatabazi() {
        try {
            if (connect != null) {
                connect.close();
            }
            System.out.println("Podarilo se odpojit od databaze");
        } catch (SQLException e) {
            System.out.println("Nepodarilo se odpojit od databaze");
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        System.out.println("Start Programu");
        pripojeniKDatabazi();
        odpojimeDatabazi();
        System.out.println("Konec Programu");
    }
}

V budúcej lekcii, Derby DB - Pripojenie k databaze IN-MEMORY , si predvedieme nastavenie pre in-memory databázu.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 402x (3.41 kB)

 

Predchádzajúci článok
Derby DB - Možnosti pripojenia
Všetky články v sekcii
DerbyDb
Preskočiť článok
(neodporúčame)
Derby DB - Pripojenie k databaze IN-MEMORY
Článok pre vás napísal Robert Michalovič
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Aktivity