// utilisation de JDBC

import java.net.URL;
import java.sql.*;
import java.lang.Runtime;

class SQLService {

// instance variables

public static String query;

public static Connection con;
public static Statement  stmt;
public static ResultSet  results;


public static String ExecDML(String sqlText) {

/* permet d'executer une commande de manipulation des donnees
   - insert, delete, update
   ou de manipulation du schema
   - create, drop, ...
*/
  int ResultCode;

  try {stmt = con.createStatement();
       ResultCode = stmt.executeUpdate(sqlText);
       return ("OK ("+ResultCode+"): "+sqlText);
       }
  catch (Exception ex) 
       {return ( "** Erreur dans : "+sqlText);}
}

public static String ExecSelect(String sqlText) {
/* permet d'executer une selection
   - select ... from ... where ...
   et d'afficher le resultat
*/
  try {stmt = con.createStatement();
       results = stmt.executeQuery( sqlText );
       PrintResults( results );
       return ("OK: "+sqlText);
      }
  catch (Exception ex) 
       {return ( "** Erreur dans : "+sqlText);}
}

public static void PrintResults( ResultSet results ) 
  throws SQLException
     {int     i;
      int     nbLigne=0; // nbre de lignes du resultat     
      int     nbCol; // nbre de colonnes du resultat
      boolean pasfini= results.next (); // indique qu'il a encore des données

      // recupere le schema du resultat (nom des colonnes, type, ...)
      ResultSetMetaData resultSchema = results.getMetaData ();
      nbCol= resultSchema.getColumnCount (); //nbre de colonnes du resultat

      // affiche les entetes des colonnes
      System.out.println();
      for (i=1; i<=nbCol; i++)
        {System.out.print(resultSchema.getColumnLabel(i));
         System.out.print("|"); // séparateur de colonne
        }
      System.out.println();
      
      // affiche les données ligne par ligne
      while (pasfini) 
        { for (i=1; i<=nbCol; i++) // pour chaque colonne
            { System.out.print(results.getString(i));
              System.out.print("|");
            }
          System.out.println("");
          nbLigne++;
          pasfini = results.next (); //prochaine ligne
        }
      System.out.println(nbLigne+" lignes trouvees par la requete");
}

public static void PrintSQLError(SQLException ex) {
   System.out.println ("**ERREUR SQLException\n");
   while (ex != null) 
      { System.out.println ("Etat   : " +ex.getSQLState ());
        System.out.println ("Message: " +ex.getMessage ());
        System.out.println ("Fournis: " +ex.getErrorCode ());
        ex = ex.getNextException ();
        System.out.println ();
     }
  }
}
/* --------------------------------------------------------------------- */

class ExampleWithJDBCAccess {

  static String DML="DML";
  static String SEL="SEL";

  public static void doIt(String typereq, String s){
     if (typereq.equals("DML")) System.out.println(SQLService.ExecDML(s));
     if (typereq.equals("SEL")) System.out.println(SQLService.ExecSelect(s));
  }

  public static void main (String args[]) {
    try { // Charger le driver jdbc-odbc bridge 
          Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
          // Connexion au driver (fournir la source odbc, utilisateur, mot de passe)
          SQLService.con = DriverManager.getConnection ("jdbc:odbc:sgbdOffice");

          // ici, on est connecté, sinon on a généré une exception

          doIt(SEL, "Select * from TELEPHONE");

          // Créer la table BANQUE, on commence par détruire la table!
          doIt(SEL, "Select * from TELEPHONE");
          doIt(DML, "drop table BANQUE");
          doIt(DML, "create table BANQUE(NOM_COMPTE CHAR(20), MONTANT Number)");
          doIt(SEL, "Select * from BANQUE");


          doIt(DML, "insert into BANQUE values ('PourMoi' , 100)");
          doIt(DML, "insert into BANQUE values ('PourToi' , 100)");
          doIt(DML, "insert into BANQUE values ('PourLui' , 500)");
          doIt(DML, "insert into BANQUE values ('PourElle', 300)");

          doIt(SEL, "Select * from BANQUE");

          doIt(DML, "update BANQUE set MONTANT= 200 where NOM_COMPTE='PourToi'");
          doIt(SEL, "Select * from BANQUE");

          doIt(DML, "delete from BANQUE where MONTANT> 250");
          doIt(SEL, "Select * from BANQUE");

          // Close the statement
          SQLService.stmt.close();

          // Close the connection
          SQLService.con.close();

     }
     catch (SQLException e) {SQLService.PrintSQLError(e);}
     catch (Exception e   ) {e.printStackTrace ();}
  }
}