1 / 22

Gruparea comenzilor - Tranzactii

Gruparea comenzilor - Tranzactii. Gruparea comenzilor void addBatch ( String  sql) throws SQLException ; //metoda Statement prin care se adauga la obiectul curent comanda specificata void clearBatch () throws SQLException ; //Stergere lista de comenzi adaugate anterior

tahlia
Télécharger la présentation

Gruparea comenzilor - Tranzactii

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gruparea comenzilor - Tranzactii Gruparea comenzilor • void addBatch(String sql) throws SQLException; //metoda Statement prin care se adauga la obiectul curent comanda specificata • void clearBatch() throws SQLException; //Stergere lista de comenzi adaugate anterior • int[] executeBatch() throws SQLException; // Executare comenzi adaugate. Intoarce un int pentru fiecare comanda in ordinea adaugarii lor. Respectiva valoare poate fi: >=0 in functie de numarul tuplurilor afectate(vezi executeUpdate), SUCCESS_NO_INFO - comanda s-a executat cu success dar nu se cunoaste numarul tuplurilor afectate EXECUTE_FAILED - executia comenzii a esuat. Executarea comenzilor urmatoare poate fi intrerupta sau nu la esec (in functie de driver)

  2. Gruparea comenzilor - Tranzactii Modul commit este legat de efectul definitiv al comenzilor. Este gestionat prin urmatoarele metodeConnection: void setAutoCommit(boolean autoCommit) throws SQLException; //stabileste modul commit (true, false). Implicit este true, adica orice comanda este executata individual si definitiv boolean getAutoCommit() throws SQLException ; //intoarce modul commit existent void commit() throws SQLException ; // declanseaza salvarea permanenta a modificarilor aparute in DB. void rollback() throws SQLException;//anularea modificarilor Metodele commit si rollback marcheaza terminarea tranzactiei curente.

  3. Niveluri de izolare pentru tranzactii Asigura izolarea tranzactiilor unele fata de celelalte si partajarea resurselor intre utilizatori concurenti. Metode de stabilire/citire nivel: void setTransactionIsolation(int level) throws SQLException int getTransactionIsolation() throws SQLException Niveluri de izolare: static final int TRANSACTION_NONE; // nu sunt permise tranzactiile static final int TRANSACTION_READ_UNCOMMITTED; // fara izolare static final int TRANSACTION_READ_COMMITTED; // nu sunt citite date care nu au fost modificate si nu s-au definitivat modificarile prin commit() static final int TRANSACTION_REPEATABLE_READ; // interzice unei tranzactii sa citesca din nou (in cadrul aceleiasi tranzactii) date dintr-un rand in care acestea au fost modificate definitiv prin commit() static final int TRANSACTION_SERIALIZABLE; // izolare completa - tranzactiile sunt serializate

  4. Comenzi precompilate Sunt comenzi compilate si memorate in stare compilata la nivelul serverului DB. Executarealor nu mai necesita recompilare. Sunt folosite pentru executarea repetata a unor operatiuni. PreparedStatementprepareStatement(Stringsql) throws SQLException PreparedStatementprepareStatement(Stringsql, intresultSetType, intresultSetConcurrency) throws SQLException PreparedStatementprepareStatement(Stringsql, intresultSetType, intresultSetConcurrency, intresultSetHoldability) throws SQLException preparedStatement inst=con.prepareStatement(“update jurnal set cod=? Where cont=?”); inst.setString(1,”0001”); inst.setString(2,”3011”); inst.executeUpdate();

  5. Executarea procedurilor stocate: CallableStatementprepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException CallableStatementprepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException CallableStatementprepareCall(String sql) throws SQLException

  6. Procesarea rezultatelor Procesare rezultatelor unei interogari se face prin comenzi ResultSet. • boolean next() throws SQLException; // trecere la rand nou • boolean absolute(int row) throws SQLException; // pozitionare absoluta pe randul specificat • boolean relative(int rows) throws SQLException; // pozitionare relativa pe un rand (fata de pozitia curenta) • boolean previous() throws SQLException; // trecere la precedent • void afterLast() throws SQLException; // dupa ultimul rand • boolean first() throws SQLException; // pe primul rand • boolean last() throws SQLException ;// pe ultimul • void beforeFirst() throws SQLException; // inaintea primului rand • boolean isLast() throws SQLException;// este sau nu ultimul rand • boolean isFirst() throws SQLException;// este sau nu primul • boolean isAfterLast() throws SQLException ;// este sau nu dupa ultimul • boolean isBeforeFirst() throws SQLException; // este sau nu inaintea primului

  7. Procesarea rezultatelor • void deleteRow() throws SQLException ; // stergere rand • void refreshRow() throws SQLException ; // actualizare rand current cu valorile din DB. Nu poate fi aplicat randului de insertie. • void updateRow() throws SQLException ; //actualizare valori din DB cu cele din randul curent • void insertRow() throws SQLException; // adaugare valori din randul de insertie la DB • void moveToInsertRow() throws SQLException;// trecere pe randul de insertie • void moveToCurrentRow() throws SQLException ; // Se aplica pe randul de insertie si are ca efect trecerea pe randul current (cel pe care se afla cursorul inainte de insertie) • TipgetTip(int columnIndex) throws SQLException; // preluare valoare din rand conform cu tipul si numarul coloanei • TipgetTip(String columnLabel) throws SQLException;// preluare valoare din rand conform cu tipul si numele coloanei • void updateTip(int columnIndex, Tip x) throws SQLException; // actualizare rand cu valoarea specificata pentru coloana specificata • void updateTip(String columnLabel, Tip x) throws SQLException;// idem

  8. Accesul la metadate Accesul la metadate prin Connection - sunt furnizate informatii despre baza de date (structura, tabele/viziuni, catalog etc.) • String getCatalog() throws SQLException • void setCatalog(String catalog) throws SQLException • DatabaseMetaDatagetMetaData() throws SQLException • ResultSetgetCatalogs() throws SQLException • ResultSetgetTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException Accesul la metadate prin ResultSet - sunt furnizate informații despre setul interogat (coloane, tipuri, dimensiuni camp etc.) • ResultSetMetaDatagetMetaData() throws SQLException • int getColumnCount() throws SQLException • StringgetColumnName(int column) throws SQLException • int getColumnType(int column) throws SQLException • StringgetColumnTypeName(int column) throws SQLException • int getColumnDisplaySize(int column) throws SQLException

  9. Surse de date • DataSource – o interfata prin care sunt generate conexiuni la o sursa fizica de date • Implementari: • Conexiuni obisnuite • Pool Connections – conexiuni reutilizabile create cu scopul economisirii resurselor • Avantajele utilizarii obiectelor DataSource • Pastrarea codului Java al aplicatiei in cazul modificarilor sursei fizice de date sau a driverelor • Capacitati de conectare sporite (pool connection, tranzactii distribuite)

  10. Implementari DataSource • Exista implementari pentru interfata DataSource ale unor drivere (Microsoft SQL Server JDBC Driver , Oracle etc.) • Implementarea Microsoft SQL Server JDBC Driver este realizata prin clasa SQLServerDataSource • Metode SQLServerDataSource : public void setServerName(java.lang.String serverName) public void setUser(java.lang.String user) public void setPassword(java.lang.String password) public void setDatabaseName(java.lang.String databaseName) public void setPortNumber(int portNumber) public java.sql.Connection getConnection() throws java.sql.SQLException

  11. Implementarea Oracle: OracleDataSource • Metode: public void setServerName(java.lang.String sn) public void setServiceName(java.lang.String svcname) public void setUser(java.lang.String userName) public void setPassword(java.lang.String pd) public void setPortNumber(int pn) public void setDriverType(java.lang.String dt); //thin sau oci public void setNetworkProtocol(java.lang.String np); // exp: tcp public java.sql.Connection getConnection() throws java.sql.SQLException

  12. Framework-uri Java Hibernate

  13. Arhitectura unei aplicatii Hibernate

  14. Plain Old Java Objects (POJO) – utilizarea claselor Java obisnuite Prin POJO sunt identificate clasele simple Java pentru care se doreste persistenta Clasele de persistenta au doar conditia de a avea un constructor fara parametrii

  15. Configurarea aplicatiei • Configurarea se poate face prin program sau cu ajutorul fisierului de configurare hibernate.cfg.xml Configurarea prin program • Crearea unei instante org.hibernate.cfg.Configuration. Obiectele Configuration reprezintă un ansamblu de mapări intre clase Java si tabele DB. Mapările sunt realizate prin fișiere XML care indică cele două elemente • Specificarea documentelor XML pentru mapare public ConfigurationaddResource(String resourceName) throws MappingException Configuration cfg = new Configuration().addResource(“Carte.hbm.xml") .addResource(“Sala.hbm.xml");

  16. Configurarea aplicatiei Specificarea claselor mapate public ConfigurationaddClass(Class persistentClass) throws MappingException Configuration cfg = new Configuration().addClass(Clasa1.class) .addClass(Clasa2.class); Se specifica clasa iar Hibernate determină fișierul de mapare corespunzător. Pentru exemplul anterior fișierul de mapare este Clasa1.hbm.xml Specificarea proprietatilor de configurare public ConfigurationsetProperty(String propertyName, String value) public ConfigurationsetProperties(Properties properties) Configuration cfg = new Configuration(); cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect"); cfg.setProperty("hibernate.connection.driver_class", "com.microsoft.sqlserver.jdbc.SQLServerDriver"); "hibernate.connection.url", "jdbc:sqlserver://localhost\\SQLEXPRESS:1433;database=student"

  17. Configurarea aplicatiei Obtinerea unui obiect de tip SessionFactory: SessionFactory sessionFact = cfg.buildSessionFactory(); Obiectele SessionFactory sunt cele care crează obiecte Session și vor fi partajate de toate firele aplicatiei Crearea conexiunilor JDBC. Deschiderea unei noi sesiuni: Session session = sessionFact.openSession(); Conexiunile sunt tinute intr-un pool-connection pentru care se poate stabili numarul maxim de conexiuni. Proprietati JDBC: hibernate.connection.driver_class – Clasa driverului JDBC hibernate.connection.url- sirul de conectare hibernate.connection.username – numele de utilizator al bazei de date hibernate.connection.password – parola de utilizator hibernate.connection.pool_size – numarul maxim de conexiuni

  18. Configurarea aplicatiei Proprietati DataSource: hibernate.connection.datasource– numele JNDI DataSource hibernate.jndi.url- URL furnizor JNDI (optional) hibernate.jndi.class - Clasa InitialContextFactory (optional) hibernate.connection.username - numele de utilizator (optional) Hibernate.connection.password- parola(optional) Alte proprietati: hibernate.dialect – numele dialectului SQL optimizat pentru o baza de date particulara hibernate.show_sql – scrierea cererilor SQL la consola (true/false) hibernate.default_schema, hibernate.default_catalog – nume de schema/catalog implicite hibernate.hbm2ddl.auto- modul de mapare : create, create-drop, update hibernate.jdbc.use_scrollable_resultset, hibernate.connection.autocommit Dialecte: MySQLDialect, OracleDialect, SybaseDialect, SQLServerDialect, InformixDialect, SAPDBDialect etc.

  19. Configurarea prin fisierul hibernate.cfg.xml Structura fisierului: <hibernate-configuration> <session-factory> ... </session-factory> </hibernate-configuration> Proprietatile sunt specificate in tag-ul property: <property name=property_name> property_value </property> Maparile se realizeaza prin tag-ul mapping : <mapping resource=resource_file/>

  20. Maparea obiectual-relationala a datelor (O/R Mapping) Realizeaza o legatura intre clasele de persistenta si tabele ale bazei de date Maparea porneste de la descrierea clasei de persistenta Se utilizeaza un fisier de configurare XML cu structura: <hibernate-mapping proprietati_hibernate_mapping> <class proprietati_class> Descriere mapare </class> </hibernate-mapping> In interiorul tag-ului class sunt facute maparile de proprietati (property), cheie primara (id), relatii (one-to-one, many-to-one), colectii etc.

  21. Proprietati hibernate-mapping schema-Numele unei scheme a bazei de date (optional) catalog-numele unui catalog al bazei de date (optional) default-cascade-defineste un tip de operatiune cascada implicit default-access-modul de acces la proprietati auto-import-Specifica daca se pot utiliza nume noncalificate de clase sau nu in cadrul interogarilor (true) package-pachet implicit pentru clase cu nume necalificat default-lazy (implicit true): - Valoare implicita pentru atributele lazy nespecificate din colecții și clase

  22. Proprietati class name (optional) - numele clasei de persistenta. Daca atributul lipseste se presupune ca maparea nu este realizata pentru o clasa obisnuita (POJO) table (optional - implicit: numele clasei) - numele tabelei schema (optional) -suprascrie numele de schema specificat la nivel de <hibernate-mapping> catalog (optional) -suprascrie numele de catalog specificat la nivel de <hibernate-mapping>

More Related