1. Langage de programmation Java 1.1. Définitions Langage de 3e génération le plus utilisé actuellement Portabilité : exécutable sur tout types d'ordinateurs quel que soit le système d'exploitation (Windows, Linux, etc.) Attention, contrairement à SQL, Java est sensible à la casse : majuscules <> minuscules Terminologie JVM (Java Virtual Machine) : exécuter des programmes Java API (Application Programming Interface) : bibliothèques d'outils (graphismes, accès BD, etc.) JDK (Java Developement Kit) : créer des programmes (compilateur, générateur de documentation, etc.) EDI (Environnement de Développement Intégré) : logiciel pour écrire, compiler et exécuter les programmes Classe : programme Java Création d'un programme 1. Écriture du code source : fichier.java 2. Compilation du code source : commande javac Génère une erreur (exception) si le programme est incorrect Sinon génère le fichier.class 3. Exécution : commande java 1.2. Instructions Opérations élémentaires (affichage, addition, etc.) Ex : afficher à l'écran le message "Hello world!" class Hello Nom du programme Début public static void main(string[] args) Fonction principale System.out.println("Hello world!"); Instructioh Fin 1.3. Commentaires Permettent d'expliciter les opérations d'un programme Commentaire sur plusieurs lignes : /* commentaire */ Commentaire de fin de ligne : // commentaire 1.4. Variables Permettent de stocker en mémoire des valeurs (nombres, textes, etc.) Identifiées par leur nom (lettres, chiffre ou "_") qui doit être unique dans le programme Opérations Déclaration (définition d'une variable) : type nom; Affectation (mettre une valeur dans la variable) : nom = valeur; Initialisation (première affectation d'une valeur) : obligatoire avant 1ère utilisation Types byte : entier [-128; 127] short : entier [-32 768; 32 767] int : entier [-2 147 483 648; 2 147 483 647] long : entier [-9 223 372 036 854 775 808; 9 223 372 036 854 775 807] float : décimal [-1.40239846 x10-45 ; 3.40282347 x10 38 ] double : décimal [4.9406564584124654 x10-324 ; 1.797693134862316 x10 308 ] 1/10
boolean : true/false char : un caractère (lettre, chiffre, symbole) String : chaîne de caractères => Attention : le séparateur décimal est le. Exemple : class TireLire 1.5. Calculs Opérateurs arithmétiques : Addition : + Soustraction : - Multiplication : * Division : / Reste de la division entière : % (ex : int l = 5 % 2; l contient 1) => Résultat d'une opération arithmétique : du même type que celui de son opérande le plus précis Opérandes de type int : résultat de type int (division entière) Ex : double n = 1 / 2; n contient 0.0 Opérandes de types double et int : résultat de type double Ex : double m = 1.0 / 2; m contient 0.5 double p = 1 / 2.0; p contient 0.5 Une variable peut être utilisée pour modifier sa propre valeur Ex : n = n + 1; incrémente n de 1 <=> n++; n = n - 1; décrémente n de 1 <=> n--; Forçage de type Changement du type d'une valeur Ex : int q = (int) 10.0 / 3; q contient 3 double r = (double) 10 / 3; r contient 3.3333 1.6. Chaînes de caractères Suite de caractères (chiffres, lettres, symboles) numérotés de 0 à longueur-1 Ex : String nom = "Dupond"; Indice : 0 1 2 3 4 5 Peut être vide : String st = ""; ou String st = null; Fonctions Longueur de la chaîne : int l = nom.length(); l contient 6 Extraire un caractère : char c = nom.charat(0); c contient 'D' Extraire une sous-chaîne : String s = nom.substring(0,2); s contient "Du" Mettre en majuscules : String m = nom.touppercase(); m contient "DUPOND" Mettre en minuscules : String n = nom.tolowercase(); n contient "dupond" Combinaison des fonctions : String p = nom.substring(0,2).touppercase(); p contient 'DU' System.out.println(nom.substring(0,2).toUpperCase()); affiche 'DU' Conversion en nombre La chaîne doit contenir une valeur numérique adaptée Ex : String s1 = "1", s2 = "2.22"; int i = Integer.parseInt(s1); i contient 1 double d = Double.parseDouble(s1); d contient 1.0 int i = Integer.parseInt(s2); génère une erreur double d = Double.parseDouble(s2); d contient 2.22 2/10
1.7. Saisies de valeurs Entrée au clavier de valeurs par l'utilisateur : 1. Utiliser la bibliothèque standard java.util.scanner : import java.util.scanner; 2. Initialiser le lecteur au clavier : Scanner sc = new Scanner(System.in); 3. Réaliser les lecture selon le type de données Types byte : nextbyte() short : nextshort() int : nextint() long : nextlong() float : nextfloat() double : nextdouble() boolean : nextboolean() String : nextline() char : lire une chaîne (fonction nextline()) et extraire le 1er caractère (fonction charat(0)) Exemple : class Saisies 1.8. Affichage Permet d'afficher des informations (texte, variables, résultats de calculs, etc.) à l'écran Instructions System.out.println(...) : aller à la ligne après affichage System.out.print(...) : sans aller à la ligne Caractères spéciaux \n : aller à la ligne \t : tabulation \\ : caractère \ \" : caractère " Exemple : class Poeme 2. Tests Permettent d'exécuter un calcul (suite d'instructions) si une condition est vérifiée 2.1. Instructions if else if (test1) Instructions exécutées si test1 est vrai else if (test2) Instructions exécutées si test2 est vrai else Instructions exécutées si aucun test précédent n'est vrai 2.2. Comparaison de nombres et caractères (uniques) Égalité : == 3/10
Supérieur : > Supérieur ou égal : >= Inférieur : < Inférieur ou égal : <= Différent :!= Ex : if (v1 == v2) vrai si v1 et v2 sont égales if (v1!= v2) vrai si v1 et v2 sont différentes Exemple : class EvaluationNote 2.3. Comparaison de chaînes de caractères Ordre lexicographique : caractères de gauche à droite comparé un à un selon l'ordre alphabétique étendu, i.e. espace < chiffres < majuscules < minuscules < caractères spéciaux (accentués, symboles, etc.) Ex : "Dupond" est avant "Dupont" "Dupond" est avant "dupond" "Dupon" est avant "Dupond" Opérateurs Test égalité : if (ch1.equals(ch2)) Test général : int res = ch1.compareto(ch2); res = 0 si ch1 est égale à ch2 res < 0 si ch1 est avant ch2 dans l'ordre lexicographique res > 0 si ch1 est après ch2 dans l'ordre lexicographique Exemple : class OrdreLexicographique 2.4. Conjonctions et disjonctions Combinaisons de plusieurs tests Conjonctions (et logique) : && Disjonctions (ou logique) : Ex : if (test1 && test2) vrai si test1 et test2 sont vrais if (test1 test2) vrai si test1 ou test2 sont vrais if (test1 && test2 test3) vrai si (test1 && test2) ou (test1 && test3) est vrai if (test1 test2 && test3) vrai si (test1) ou (test2 && test3) est vrai Exemple : class ConjonctionsDisjonctions 2.5. Négation Opérateur :! Ex : if (!n >= 0) <=> if (n < 0) if (!(n >= 0 && n <= 20)) <=> if (n < 0 n > 20) if (!(n < 8 n >= 10)) <=> if (n >= 8 && n < 10) 2.6. Switch Tests successifs d'une variable de type int switch(variable) case valeur1: break; case valeur2: break; default: Instructions exécutées si variable == valeur1 Pour éviter que les cas suivants soient testés Instructions exécutées si aucun des cas précédents n'est vérifié 4/10
Exemple : class SwitchCase 3. Boucles Permettent de répéter un calcul plusieurs fois, tant qu'une condition d'exécution est vérifiée Itération : une exécution du calcul 3.1. For Utilisé si on sais à l'avance combien d'itérations doivent être réalisées Format for (initialisation; condition; incrémentation) instruction(s); Définition : initialisation : défini la valeur initiale de l'indice de boucle (variable de type int compteur d'itérations) condition : test portant sur l'indice effectué avant chaque itération pour déterminer si la boucle continue ou non incrémentation : modification de l'indice en fin de chaque itération (ex : +1, -1) Ex : parcours des caractères d'une chaîne (longueur connue) nom Initialisation de l'indice de boucle (i) Condition d'exécution Pas de la boucle (+1) for (int i = 0; i < nom.length; i++) Instructions exécutées lors de chaque itération Exemple : class ParcoursChaine, Factorielle, Palindrome 3.2. While Utilisé si on ne sais pas à l'avance combien d'itérations doivent être réalisées Format while (condition) nom : A d a m nom.length = 4 instruction(s); => Variable testée dans la condition doit être modifiée (calcul, saisie, etc.) dans la boucle sinon boucle infinie Ex : répétition tant que l'utilisateur le désire, répétition de saisie tant que valeur non valide while (valeur < 0)... i : Exemple : class VerificationSaisie 3.3. Do while 0 1 2 3 Condition d'exécution de la boucle Réalise une itération avant de tester la condition d'exécution Instructions exécutées tant que la valeur saisie est négative 5/10
Format do instruction(s); while (condition); Exemple : class ControleExecution 4. Tableaux Permettent de stocker en mémoire plusieurs valeurs du même type Le nombre de cases et le type sont fixés lors de la déclaration 4.1. Opérations Déclaration : type[] nom = new type[taille]; Ex : int[] tab = new int[5]; tableau de 5 nombres entiers tab : Indice : 0 1 2 3 4 Affectation d'une valeur dans une case : nom[indice] = valeur; Ex : tab[0] = 2; la 1ère case contient 2 Accès à une valeur : nom[indice] Ex : System.out.println(tab[0]); affiche le contenu de la 1ere case Initialisation globale lors de la déclaration Ex : int[] nbrpremiers = 1,2,3,5,7,11,13,17,19,23; String[] semaine = "lundi","mardi","mercredi","jeudi", "vendredi","samedi","dimanche"; Parcourir le tableau : boucle for dont l'indice varie de 0 à nom.length (valeur et non fonction) Ex : for (int i = 0; i < tab.length; i++) Instructions exécutées pour chaque case tab[i] Ex : System.out.println(tab[i]); affichage Exemple : class ParcoursTableau, Poeme 4.2. Tableaux à plusieurs dimensions Tableaux de tableaux Deux dimensions : matrice Ex : int[][] tab = new int[2][5]; 2 lignes et 5 colonnes Parcours par boucles for imbriquées : tab.length : nombre de lignes tab[i].length : longueur de la ième ligne (nbr colonnes) Ex : for (int i = 0; i < tab.length; i++) Boucle pour chaque ligne tab[i] for (int j = 0; j < tab[i].length; j++) Boucle pour chaque case tab[i][j] Instructions exécutées pour chaque case tab[i][j] Ex : System.out.println(tab[i][j]); affichage Exemple : class TableMultiplication, DemiMatrice 5. Fonctions Permettent de décomposer une tâche en plusieurs sous-tâches 6/10
Signature : défini nom et méthode d'utilisation de la fonction Format type_retour nom(liste_paramètres) instruction(s); Définition : nom : nom utilisé pour appeler la fonction (i.e. l'exécuter) liste_paramètres : données fournies à la fonction (arguments) Aucun paramètre : liste vide type_retour : type de valeur (ou tableau) renvoyée par la fonction Aucun retour void Valeur renvoyée par l'instruction : return(valeur); Ex : int factorielle(int nbr) int fact = 1; for (int i=1; i<=nbr; i++) fact = fact * i; return(fact); Exemple : class ConversionsCmPouces, FonctionsTableau 6. Bibliothèques Contiennent des outils (fonctions et valeurs) déjà définis Regroupés dans un API identifié oar un numéro de version (actuellement version 7) Leur contenu est décrit sur : http://www.oracle.com/technetwork/java/index.html Liste des bibliothèques Liste des classes de la bibliothèque sélectionnée ou standard Description de la classe sélectionnée (valeurs et fonctions) 6.1. Bibliothèque standard java.lang Importée par défaut Défini les bases du langage Exemples : classe Math valeurs Math.PI : valeur de Π, Math.E : base des logarithmes naturels fonctions Math.sqrt(x) : racine carrée de x, Math.pow(x,y) : calcule x y, etc. 6.2. Autres bibliothèques Doivent être importées par un import Exemples : java.util : utilitaires 7/10
classe Scanner : saisies classe Date : dates etc. java.io : entrées/sorties fichiers java.sql : accès bases de données 6.3. Exceptions Exception : erreur survenant durant l'exécution Certaines exceptions doivent impérativement être gérées Ex : IOException, SQLException Toutes les exceptions sont regroupées dans la classe Exception (permet un traitement général) Traitements spécifiques try instruction(s) pouvant générer des exceptions catch(typeexception e) instruction(s) traitant l'exeption e Un bloc catch() pour chaque type d'exceptions traité Ignorer des exceptions Déclarées lors de la définition de la fonction type_retour nom(liste_paramètres) throws liste_typeexception instruction(s); Exemple : class BibliothequeDates, CopieCaracteres, CopieLignes 7. JDBC Java DataBase Connectivity : outils de manipulation de bases de données Processus : 1. Importer la bibliothèque java.sql : import java.sql.*; 2. Charger en mémoire la classe du driver (dépend du SGBD) : BD MySQL : Class.forName ("com.mysql.jdbc.driver"); BD Oracle : Class.forName("oracle.jdbc.driver.OracleDriver"); JDBC-ODBC : Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Peut générer une ClassNotFoundException 3. Ouvrir une connexion : Connection conn = DriverManager.getConnection(url, "user", "password"); Peut générer une SQLException 4. Créer l'instruction SQL : Requête non-paramétrée : Statement Requête paramétrée : PreparedStatement Requête stockée : CallableStatement 5. Lancer leur exécution : Requête de sélection : executequery() Requête de modification : executeupdate() 8/10
Requête indéterminée : execute() 6. Utiliser les résultats Requête de sélection : boucle de parcours des lignes renvoyées Requête de modification : nombre de lignes modifiées Requête indéterminée : tester le type de résultats 7. Fermer la requête et la connexion : close() 7.1. Requêtes de sélection Procédure Créer un objet ResultSet pour récupérer les résultats de la requête Créer un objet Statement obtenu à partir de l'objet Connection Faire un appel à executequery() avec la requête en paramètre executequery() renvoie un ResultSet contenant les lignes sélectionnées Créer une boucle parcourant chaque ligne du ResultSet Afficher chaque colonne de la ligne par un getxxx(int numcolonne) ordre des colonnes connus getxxx(string nomcolonne) ordre inconnu où XXX correspond au type de valeur récupérée (int, double, String, etc.). Principaux types INTEGER et INT : int getint(...) REAL : float getfloat(...) DOUBLE et FLOAT : double getdouble(...) DECIMAL et NUMERIC : BigDecimal getbigdecimal(...) CHAR et VARCHAR : String getstring(...) BINARY et VARBINARY : byte getbytes(...) BOOLEAN : boolean getboolean(...) DATE : java.sql.date getdate(...) TIME : java.sql.time gettime(...) Général : utiliser Sting getstring(...) Exemple : class SelectSimple 7.2. Requêtes de modification Procédure Créer une variable de type int pour récupérer le retour de la requête Créer un objet Statement obtenu à partir de l'objet Connection Faire un appel à executeupdate() avec la requête en paramètre executeupdate() renvoie un nombre entier indiquant le nombre de lignes modifiées (0 sinon) Afficher le nombre renvoyé (requêtes de modification de lignes) Exemple : class ModificationSimple 7.3. Requêtes paramétrées Procédure Créer un objet PreparedStatement en utilisant le joker? pour définir les valeurs paramétrées Utiliser les méthodes setxxx() pour définir les valeurs des jokers Faire un appel à executequery(), executeupdate() ou execute() selon le type de requête Afficher le retour (ResultSet ou nombre de lignes modifiées) Principaux types INTEGER et INT : setint(int numjoker, int x) 9/10
DOUBLE et FLOAT : setdouble(int numjoker, double x) REAL : setfloat(int numjoker, float x) DECIMAL et NUMERIC : setbigdecimal(int numjoker, BigDecimal x) CHAR et VARCHAR : setstring(int numjoker, String x) BINARY et VARBINARY : setbytes(int numjoker, byte[] x) BOOLEAN : getboolean(int numjoker, boolean) DATE : setdate(int numjoker, java.sql.date x) TIME : settime(int numjoker, java.sql.time x) Valeur NULL : setnull(int numjoker, java.sql.types T) ou T est le nom du type SQL (INTEGER, VARCHAR, etc.) numjoker : numéro du joker? à remplacer dans le texte de la requête (1er 1, 2ème 2, etc.) Exemple : SelectParametre, ModificationParametree, SelectAbonnesEmprunts 8. Références Sites Internet : http://java.developpez.com/ http://www.commentcamarche.net/contents/java/ http://www.siteduzero.com/tutoriel-2-178-java.html Livres : Programmer en Java (7e édition), Claude Delannoy, Eyrolles, 2010 Apprenez à programmer en Java, Cyrille Herby, Simple IT, 2011 Aide-mémoire de Java (3e édition), Vincent Granet et Jean-Pierre Regourd, Dunod, 2011 10/10