// 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 ();}
}
}