Conectivitate Java DataBase

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică JDBC ( Java DataBase Connectivity ) [1] , este un conector de bază de date ( driver ) care permite accesul și gestionarea persistenței datelor pe baze de date din orice program scris cu limbajul de programare Java , indiferent de tipul de SGBD utilizat. Acesta constă dintr-un API orientat obiect orientat către baze de date relaționale , grupat în pachetul java.sql , care este utilizat de clienți pentru a se conecta la o bază de date prin furnizarea de metode pentru interogarea și modificarea datelor.

Java 2 Standard Edition Platforma conține API - ul JDBC, împreună cu punerea în aplicare a unui pod JDBC-ODBC , care vă permite să se conecteze la baze de date relaționale care suport ODBC , care este în cod nativ și nu în Java. De obicei, fiecare DB are propriul său driver JDBC specific pentru a interfața cu aplicația. Adesea cadrele de persistență în Java (de exemplu, Hibernate ) în implementarea lor la o interfață de nivel superior la un nivel inferior cu un strat de software JDBC.

Arhitectură

Arhitectura JDBC, precum și cea a ODBC, prevede utilizarea unui "manager de drivere", care expune un set de interfețe standard aplicațiilor și se ocupă de încărcarea driverelor corespunzătoare la " runtime " pentru a "conduce" SGBD specific. Aplicațiile Java utilizează „API-ul JDBC” pentru a vorbi cu managerul de drivere JDBC, în timp ce managerul de drivere utilizează API-ul pentru driverul JDBC pentru a vorbi cu driverele individuale care conduc DBMS-uri specifice. Există un anumit driver, „JDBC-ODBC Bridge”, care vă permite să interfațați cu orice driver ODBC într-un mediu Windows .

Tipuri de șoferi

Există drivere gratuite și comerciale pentru majoritatea serverelor de baze de date relaționale. Șoferii pot fi de patru tipuri:

Prezentare generală a API-ului

JDBC admite că există diferite implementări și sunt utilizate de aceeași aplicație . API oferă un mecanism care încarcă dinamic driverele corespunzătoare și le înregistrează în Managerul de driver JDBC. Acționează ca o fabrică de conexiuni.

Conexiunile JDBC acceptă crearea și executarea instrucțiunilor . Acestea pot fi comenzi SQL precum INSERT, UPDATE, DELETE, interogări precum SELECT sau apeluri la proceduri stocate . Tipurile de instrucțiuni acceptate sunt:

  • Declarație - declarația este trimisă la bază de date din când în când;
  • Declarație pregătită - declarația este compilată o singură dată, astfel încât apelurile ulterioare să fie mai eficiente;
  • Declarație apelabilă - utilizată pentru apelarea procedurilor stocate.

Scrieți comenzi precum INSERT, UPDATE și DELETE returnează o valoare care indică câte rânduri au fost implicate (inserate, modificate, șterse) în instrucțiune. Nu returnează alte informații.

Interogările ( interogările ) returnează un set de rezultate (clasa ResultSet ). Puteți trece prin setul de rezultate linie cu linie (prin metoda next () ). Coloanele fiecărui rând pot fi accesate apelându-le după nume sau după număr. Setul de rezultate poate consta din orice număr de rânduri. Include metadate care indică numele, tipul și dimensiunea coloanelor.

Există o extensie JDBC care permite, printre altele, utilizarea seturilor de rezultate care pot fi derulate și a cursoarelor de pe partea clientului. Consultați documentația Sun Microsystems pentru mai multe informații.

Excepțiile

Toate metodele API-ului JDBC pot genera excepții , deoarece conexiunea la SGBD în orice moment poate suferi o întrerupere sau în orice caz pot apărea erori la executarea comenzilor SQL. Toate excepțiile JDBC derivă din clasa SQLException și pot fi, de asemenea, concatenate cu mai multe excepții diferite. Fiecare excepție conține un mesaj descriptiv, un șir care conține starea SQL (conform specificației XOPEN SQL) și un număr întreg conținând un cod de eroare suplimentar specific driverului sau sursei utilizate.

Exemple

Metoda Class.forName () încarcă clasa driverului JDBC. Următoarea linie încarcă driverul pentru myDbms în aplicație.

 Clasa . forName ( "com.mioDbms.mioDriver" );

Apoi, metoda DriverManager.getConnection () creează o conexiune.

 Connection conn = DriverManager . getConnection ( 
     "jdbc: myDbms: alte date utile pentru driver" ,
     „myLogin” ,
     „Parola mea” );

Șirul de utilizat depinde de driverul JDBC pe care îl vom folosi. Începe întotdeauna cu „jdbc:”, restul variază în funcție de produsul ales. Odată ce conexiunea este stabilită, trebuie transmisă o instrucțiune.

 Declarație stmt = conn . createStatement ();
 stmt . executeUpdate ( "INSERT INTO myTable (name) VALUES ('andrea')" );

Datele sunt preluate din baza de date cu mecanismul de interogare clasic. Exemplul de mai jos arată cum să creați și să rulați o interogare:

 Declarație stmt = conn . createStatement ();
 ResultSet rs = stmt . executeQuery ( "SELECT * FROM myTable" );
 while ( rs . next () ) {
    int numberColumns = rs . getMetaData (). getColumnCount ();
    for ( int i = 1 ; i <= numberColumns ; i ++ ) {
       // Numerele coloanelor încep de la 1.
       // Există mai multe metode care convertesc valoarea unei coloane într-un anumit tip.
       // Consultați documentația pentru o listă de conversii valide.
       Sistem . afară . println ( "COLUMN" + i + "=" + rs . getObject ( i ) );
    }
 }
 rs . close ();
 stmt . close ();

Cu toate acestea, este rar ca un programator Java scrie cod în acest stil. Cel mai obișnuit mod este de a insera logica bazei de date într-o altă clasă și de a transmite șirurile SQL deja procesate (probabil derivând și dintr-o altă clasă) și conexiunea la metodele care au nevoie de ele.

Un exemplu de declarație pregătită. Se utilizează conexiunea din exemplul anterior.

 incearca {
   
    ResultSet rs ;
    PreparedStatement ps = conn . prepareStatement ( 
             "SELECȚIONEAZĂ i. *, J. * DIN Omega i, Zappa j UNDE i =? ȘI j =?" );
    // În declarația pregătită ps, semnele de întrebare indică variabilele de intrare,
    // care poate fi trecut printr-o listă de parametri, de exemplu.
 
    // Următorul cod înlocuiește semnele de întrebare cu șiruri sau numere întregi.
    // Primul parametru indică poziția în care trebuie inserată valoarea,
    // al doilea parametru este valoarea de inserat.
    ps . setString ( 1 , "Poor Yorick" );
    ps . setInt ( 2 , 8008 );
 
    // ResultSet rs primește răspunsul de la baza de date.
    rs = ps . executeQuery ();
    while ( rs . next () ) {
       int numberColumns = rs . getMetaData (). getColumnCount ();
        for ( int i = 1 ; i <= numberColumns ; i ++ ) {
           Sistem . afară . println ( "COLUMN" + i + "=" + rs . getObject ( i ) );
     }
 
    rs . close ();
    ps . close ();
   
 } catch ( SQLException e ) {
    // tratarea excepțiilor
 }

Iată câteva exemple de conversii între SGBD și Java.

Tipuri Oracle Metode Java
CHAR
setString ()
VARCHAR2
setString ()
LUNG
setString ()
NUMĂR
setBigDecimal ()
setBoolean ()
setByte ()
setShort ()
setInt ()
setLong ()
setFloat ()
setDouble ()
ÎNTREG setInt ()
PLUTI setDouble ()
CLOB setClob ()
BLOB setBlob ()
BRUT
setBytes ()
LONGRAW
setBytes ()
LA TINE ACASA
Seteaza data ()
regleaza ora ()
setTimestamp ()

Închiderea conexiunilor

Eliberarea resurselor alocate în timpul operațiunilor bazei de date, în special obiectul conexiunii , este deosebit de importantă, deoarece numărul total de conexiuni disponibile este limitat și în mod normal conexiunea la DB nu este eliberată automat atunci când nu mai este utilizată.

Pentru a vă asigura că o conexiune este închisă corect, chiar și în cazul unei excepții, este o idee bună utilizați în cele din urmă . De asemenea, ar trebui să fii deosebit de atent să nu arunci alte excepții în blocul final:

 Conectare con = nul ;
  incearca {
    cu = DriverManager . getConnection ( URL , „” , „” );
    // Eu folosesc conexiunea
    ...
  } catch ( Exception e ) {
    ...
  } în cele din urmă {
    if ( cu ! = nul ) cu . close ();
  }

Notă

Elemente conexe

Alte proiecte

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT