package ch.hearc.ig.dialoguedb.serie3;

import com.sun.rowset.JdbcRowSetImpl;
import com.sun.rowset.WebRowSetImpl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.WebRowSet;
import javax.sql.rowset.spi.SyncProviderException;
import javax.sql.rowset.spi.SyncResolver;

/**
*
* @author baudetc
*/
public class Ex8 {

    public static void main(String[] args) {
        String url = "jdbc:oracle:thin:@ne-ege-leto.ig.he-arc.ch:1521:ens";
        String user = "prof_baudet";
        String password = "********";

        /* Test d'un RowSet en mode connecté et tests de ses proprités de JavaBean
        * -----------------------------------------------------------------------
        */
        // Instanciation d'un RowSet connecté
        JdbcRowSet jdbcRowSet = new JdbcRowSetImpl();

        try {
            System.out.println("---- Test connecté ----");
            // Paramètre pour la connexion BD
            jdbcRowSet.setUrl(url);
            jdbcRowSet.setUsername(user);
            jdbcRowSet.setPassword(password);
            jdbcRowSet.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
            jdbcRowSet.setConcurrency(ResultSet.CONCUR_UPDATABLE);
            jdbcRowSet.setAutoCommit(false);

            // Affectation de la requête SQL
            String mySelect = "SELECT NUM_CLAS, MATRICULE, NOM, PRENOM FROM ELEVES WHERE  NUM_CLAS = ? ORDER BY NOM, PRENOM";
            jdbcRowSet.setCommand(mySelect);
            jdbcRowSet.setInt(1, 20);

            // Exécution du RowSet
            jdbcRowSet.execute();

            while (jdbcRowSet.next()) {
                if (jdbcRowSet.isFirst()) {
                    System.out.println("Premier élève de la liste");
                }
                if (jdbcRowSet.isLast()) {
                    System.out.println("Dernier élève de la liste");
                }
                System.out.println(jdbcRowSet.getString("NOM")+" "+jdbcRowSet.getString("PRENOM"));
            }

            // NB mon jdbcRowSet est dynamique et updatable...
            jdbcRowSet.last();
            jdbcRowSet.updateString("PRENOM", "Julie");
            jdbcRowSet.updateRow();
            jdbcRowSet.commit();

            // Afficher pour contrôle
            System.out.println(jdbcRowSet.getString("NOM")+" "+jdbcRowSet.getString("PRENOM"));


        } catch (SQLException ex) {
            Logger.getLogger(Ex8.class.getName()).log(Level.SEVERE, null, ex);
      }finally {
        try
        {
            jdbcRowSet.close();
        }
        catch (SQLException sqlex)
            {
                System.out.println("Erreur SQL:" + sqlex);
            }
        }

        /* Test d'un RowSet en mode déconnecté
        * ---------------------------------
        */
        WebRowSet disconnectedRowSet = null;
        try {
            System.out.println("---- Test déconnecté ----");
            // Instanciation d'un RowSet déconnecté
            disconnectedRowSet = new WebRowSetImpl();
            // Paramètre pour la connexion BD
            disconnectedRowSet.setUrl(url);
            disconnectedRowSet.setUsername(user);
            disconnectedRowSet.setPassword(password);
            disconnectedRowSet.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
            disconnectedRowSet.setConcurrency(ResultSet.CONCUR_UPDATABLE);

            // Affectation de la requête SQL
            String mySelect = "SELECT NUM_CLAS, MATRICULE, NOM, PRENOM FROM ELEVES WHERE  NUM_CLAS = ? ORDER BY NOM, PRENOM";
            disconnectedRowSet.setCommand(mySelect);
            disconnectedRowSet.setInt(1, 20);

            // Exécution du RowSet
            disconnectedRowSet.execute();

            while (disconnectedRowSet.next()) {
                if (disconnectedRowSet.isFirst()) {
                    System.out.println("Premier élève de la liste");
                }
                if (disconnectedRowSet.isLast()) {
                    System.out.println("Dernier élève de la liste");
                }
                System.out.println(disconnectedRowSet.getString("NOM")+" "+disconnectedRowSet.getString("PRENOM"));
            }

            // NB mon cachedRowSet est dynamique et updatable...
            disconnectedRowSet.setTableName("ELEVES"); // Spécifier le nom de la table que je vais mettre à jour...
            disconnectedRowSet.last();
            disconnectedRowSet.updateString("PRENOM", "Brigitte");
            disconnectedRowSet.updateRow();

            // ATTENTION, ici les données ont été mise à jour dans le RowSet déconnecté et non pas dans la BD!
                // Ici c'est donc toujours Julie dans ma BD!!!

            // Propagation des mes modifications vers la base de données
            disconnectedRowSet.acceptChanges();
            // Maintenant mes changements sont appliqués à ma BD! Le commit est effectué lors de l'appel à la méthode acceptChanges()

            // Afficher pour contrôle
            System.out.println(disconnectedRowSet.getString("NOM")+" "+disconnectedRowSet.getString("PRENOM"));

            } catch(SyncProviderException spe) {
                System.out.println("Exception de synchro");
                System.out.println(spe);
              SyncResolver resolver = spe.getSyncResolver();
              int myStatus = resolver.getStatus();

              switch(myStatus){
                case SyncResolver.INSERT_ROW_CONFLICT :
                  System.out.println("Conflit à l’insertion");
                  break;
                  }
              switch(myStatus){
                case SyncResolver.DELETE_ROW_CONFLICT :
                  System.out.println("Conflit à la suppression");
                  break;
                  }
              switch(myStatus){
                case SyncResolver.UPDATE_ROW_CONFLICT :
                  System.out.println("Conflit à l’insertion");
                  break;
                }


          } catch (SQLException ex) {
            Logger.getLogger(Ex8.class.getName()).log(Level.SEVERE, null, ex);
      }finally {
        try
        {
            disconnectedRowSet.close();
        }
        catch (SQLException sqlex)
            {
                System.out.println("Erreur SQL:" + sqlex);
            }
        }
    }
}
Zuletzt geändert: Montag, 15. Juli 2013, 23:30