Documentation technique



Documents pareils
Modélisation et Gestion des bases de données avec mysql workbench

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Le Langage De Description De Données(LDD)

PHP 5. La base de données MySql. A. Belaïd 1

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Serveur de travail collaboratif Michaël Hoste -

Stockage du fichier dans une table mysql:

Raja Bases de données distribuées A Lire - Tutoriel

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Introduction à JDBC. Accès aux bases de données en Java

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Application web de gestion de comptes en banques

Olivier Mondet

Mysql. Les requêtes préparées Prepared statements

Création et Gestion des tables

Bases de Données relationnelles et leurs systèmes de Gestion

CREATION WEB DYNAMIQUE

Compte Rendu d intégration d application

1. Introduction Création d'une requête...2

Installation 1K-Serveur

La magie de SVN. Découverte & usage du logiciel

Compétences Business Objects

Installation et prise en main

Langage SQL : créer et interroger une base

Utilisation du BDE pour la maintenance des fichiers DBF de l'application TopoCad:

Cours: Administration d'une Base de Données

Cours 420-KEG-LG, Gestion de réseaux et support technique. Atelier No 6-1

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Bases de données et sites WEB

Guide d'installation et de configuration du module

Comptabilité - USR. Logiciel : Comptabilité USR - Version 2,16 Documentation réalisée par JJ Gorge Trésorier Tir à l'arc le 04/04/ / 15

Trier les ventes (sales order) avec Vtiger CRM

TeamViewer 9 Manuel Management Console

TP3 : Creation de tables 1 seance

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Compte-rendu de projet de Système de gestion de base de données

Tutoriel - flux de facturation

Uniformiser la mise en forme du document. Accélère les mises à jour. Permets de générer des tables de matières automatiquement.

2 Grad Info Soir Langage C++ Juin Projet BANQUE

I. MySQL : Serveur et SGBD

AGRÉGATION «ÉCONOMIE ET GESTION»

Gestion de base de données

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Guide de l'utilisateur

Phone Manager Soutien de l'application OCTOBER 2014 DOCUMENT RELEASE 4.1 SOUTIEN DE L'APPLICATION

Le langage SQL (première partie) c Olivier Caron

Cadastre du bruit SIT-JURA. Connecteur Arcview9.x - MSAccess. Mode d emploi. Appel formulaire. Page 1 sur 15

Débuter avec OOo Base

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Migration d une Base de données

SQL Historique

Rendre un plan de cours interactif avec Médiator

Guide pour la réalisation d'un document avec Open Office Writer 2.2

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

1. Installation du Module

Gestion d'un parc informatique avec OCS INVENTORY et GLPI

Mise en place Active Directory, DNS Mise en place Active directory, DNS sous Windows Serveur 2008 R2

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

LANDPARK NETWORK IP LANDPARK NETWORK IP VOUS PERMET D'INVENTORIER FACILEMENT VOS POSTES EN RÉSEAU

Asset Management Software Client Module. Manuel d utilisation

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

ORACLE TUNING PACK 11G

1. Base de données SQLite

Cours 420-KEG-LG, Gestion de réseaux et support technique. Atelier No2 :

Les Utilisateurs dans SharePoint

PHP 4 PARTIE : BASE DE DONNEES

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Louer et utiliser un Hébergement Mutualisé OVH (Version 1.0)

Bases de données relationnelles

ECLIPSE ET PDT (Php development tools)

Manuel d'utilisation d'apimail V3

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

DEVAKI NEXTOBJET PRESENTATION. Devaki Nextobjects est un projet sous license GNU/Public.

GESTION DES BONS DE COMMANDE

Sommaire. Etablir une connexion avec une base de données distante sur PostGreSQL

Maarch V1.4

Application de lecture de carte SESAM-Vitale Jeebop

TAGREROUT Seyf Allah TMRIM

BIRT (Business Intelligence and Reporting Tools)

Java DataBaseConnectivity

MODE OPERATOIRE CORIM PROGRESS / SECTION MEI. Exploitation Informatique

Test de HSQLDB et Comparatif avec Sqlite

Authentification automatique sur La Plateforme collaborative LeadeR y-content

CONNECTEUR PRESTASHOP VTIGER CRM

LANDPARK HELPDESK HISTORIQUES DES AMÉLIORATIONS PAR VERSIONS

Guide sommaire de TecLocal

Gestion des utilisateurs et de leurs droits

Architecture de la plateforme SBC

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Notes de cours : bases de données distribuées et repliquées

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

Historisation des données

Didacticiel PowerAMC 11.0 MPD

Transcription:

Documentation technique Table des matières I) Spécificités techniques:... 2 II) Diagramme de cas d'utilisation:... 2 III) Phase de test:... 3 IV) Précisions à propos de certains points du projet:... 6 V) Les améliorations que je souhaite effectuer:... 8

I) Spécificités techniques: Environnement de développement utilisé: NetBeans IDE 8.0.2 Serveur pour le développement: Local avec Wampserveur 2.5 Type de serveur et version: 8 unicode MySQL 5.6.17, jeu de caractère UTF- Application web pour le SGBD: PHPMyAdmin 4.1.14 Spécificités des langages: JAVA SE RE1.7 SQL Librairies Java utilisées: Java Development Kit 1.7 Beans Binding 1.2.1 mysql-connector-java-5.0.8-bin.jar Rs2xml.jar afin de traiter les résultats SQL (Principalement insérer dans une JTable le résultat) Gestion de version: Débogueur: Création BDD: Intégré à Netbeans et Dropbox Intégré à Netbeans MYSQL Workbench 6.2 CE II) Diagramme de cas d'utilisation: Quels sont utilisateurs et comment utilisent ils le service?

Le diagramme est disponible dans sa version exporté en image et sa version de création. Elle a été créée avec le logiciel gratuit Yed. III) Phase de test: Bug ou problèmes: Voici ci-dessous certains des bugs et des oublies que j'ai rencontrées lors de la phase de test du programme. Apparition du bug ou de l'oubli -Bouton "supprimer" cliqué lorsque aucun élève n'est sélectionné -Bouton "modifier" cliqué lorsque aucun élève n'est sélectionné -Bouton "supprimer" cliqué lorsqu'un élève Action -Le programme essaye de supprimer / modifier l'élève -Le programme affiche: élève supprimé / élève modifier -La suppression de la relation entre l'élève et sa Résolution Ajout d'une condition englobant la fonction des évènements "modifier" et "supprimer": if(integer.valueof(eleve_courant.id)!= 0){ /* [ ] */ } if(eleve_courant.id!= 0){ /* [ ] */ } Ajout de la suppression d'une ligne dans la table eleve_has_section après la suppression de l'élève

ayant une classe est sélectionné -Bouton "supprimer" cliqué lorsqu'un élève ayant une classe est sélectionné (Après la résolution du précédent oubli) section n'est pas gérée -Une exception SQL est levé: (Foreign Key Constraint Error) lorsque l'id de l'élève précédemment supprimé est le même que dans la dite table. Supprimer les lignes en référence aux clefs étrangères de la table "eleve" avant de supprimer l'élève. => Je me suis rendu compte que cette méthode n'était pas la bonne car la suppression des clefs étrangères peut, et doit être géré par la base de donnée en spécifiant les actions à effectuer lors de la suppression des éléments parents. La requête suivante, créé avec phpmyadmin modifie les clefs étrangères de la table "eleve_has_section". Elle permet de supprimer les modifications effectué sur la table parent vers la table enfant grâce au mot clef CASCADE. ALTER TABLE `eleve_has_section` DROP FOREIGN KEY `fk_eleve_has_section_eleve1`; ALTER TABLE `eleve_has_section` ADD CONSTRAINT `fk_eleve_has_section_eleve1` FOREIGN KEY (`eleve_id_eleve`) REFERENCES `mydb`.`eleve`(`id_eleve`) ON DELETE CASCADE ON UPDATE NO ACTION; ALTER TABLE`eleve_has_section` DROP FOREIGN KEY `fk_eleve_has_section_section1`; ALTER TABLE `eleve_has_section` ADD CONSTRAINT `fk_eleve_has_section_section1` FOREIGN KEY (`section_id_section`) REFERENCES `mydb`.`section`(`id_section`) ON DELETE CASCADE ON UPDATE NO ACTION; Note: il n'y a pas d'action à l'update car les IDs des tables ne sont jamais changé. Résolution complête d'un bug avec l'utilisation du débogueur: J'utilise le débogueur intégré à l'ide Netbeans afin de résoudre les bugs et les différents bloquages que j'ai rencontré. Dans cet exemple, je ne parvenais pas à préparer une partie de la requete SQL permetant d'afficher les élèves grâce à une recherche. Tout le cheminement qui m'a permit d'arriver au résultat, comprenant ses impasses et ses défaults sont détaillé. 1 ère étape: Création de point d'arrêt Je crée un ou des point d'arrêt (break point) aux endroits ou je souhaite analyser le comportement du programme. Ci-dessous le point d'arrêt est inséré dans l'évènement "ActionPerformed" du bouton "ok", avant que la fonction soit retourné par la destruction de l'élément.

2 ème étape: Lancement du mode déboguage Je lance ensuite le programme en mode déboguage en cliquant sur l'icone "Debug Project". 3 ème étape: Recherche des variables intérressentes au point d'arrêt Ci-dessus, la variable sql_return, après avoir été modifié par la ligne suivante: On peut constater que des caractères d'échappement se sont insérés avant les apostrophes, c'est l'origine de mon problème. 4 ème étape: Analyse et résolution du problème: Lorsqu'on utilise l'opérateur += avec un objet String. Un caractère d'échappement est inséré avant un caractère spécial. 1 ère solution: J'ai trouvé après quelques recherches une solution qui est de créer un objet Java gérant les chaines de caractères mieux adapté à la modification: L'objet StringBuffer, que j'ai tout d'abord utilisé comme ceci: Note: La requête est ici simplifiée pour d'avantage de lisibilité String sql = "Select e.nom, e.prenom from eleve e where " // Création de la requête de base StringBuffer sb = new StringBuffer(100); // Création d'un objet StringBuffer sb.append("e.nom LIKE '%?%' "); // Ajout de chaines de caractères sql += sb; // Ajout de la chaine sb pst = conn.preparestatement(sql); // On prépare la requête sql pst.setstring(1, clause_where.getnom()); // On remplace le premier? rs = pst.executequery(); // On exécute et on stock le résultat J'utilise de nouveau mon débogueur comme précédemment afin d'analyser mes objets String sql et StringBuffer sb. Valeur de StringBuffer sb: "e.nom LIKE /'%?%/' " Valeur de String sql: "Select e.nom, e.prenom from eleve e where e.nom LIKE '%?%' "

Le résultat attendu pour les valeurs obtenu est atteint, mais une nouvelle exception SQL est levée: Java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). Grossièrement, on essaye de remplacer un minimum de 1 paramètre? Alors que la fonction en a 0: J'en conclu donc que la méthode setstring de l'objet PreparedStatement ne s'utilise pas comme cela. 2 ème solution: Après une relecture de la méthode setstring et quelques recherches, je m'aperçois que le chemin que j'ai emprunté pour résoudre le problème est le mauvais: En effet, l'objet PreparedStatement gère tout seul les apostrophes, il suffit alors d'utiliser la méthode setstring en concaténant les caractères % comme suivant: String sql = "Select e.nom, e.prenom from eleve e where " // Création de la requête de base StringBuffer sb = new StringBuffer(100); // Création d'un objet StringBuffer sb.append("e.nom LIKE? "); // Ajout de chaines de caractères sql += sb; // Ajout de la chaine sb pst = conn.preparestatement(sql); // On prépare la requête sql pst.setstring(1, "%" + clause_where.getnom() + "%"); // On remplace le premier? rs = pst.executequery(); // On exécute et on stock le résultat Je test alors mon programme et je contrôle la chaine de caractère avant qu'elle ne soit exécutée avec la commande System.out.println(pst); Cela me permet d'afficher dans la console la chaine voulu: select e.nom, e.prenom, from eleve e where e.nom LIKE '%pas%' La commande SQL, avant d'être injecté est bien celle que je souhaite avoir: Le programme fonctionne alors comme espéré. Conclusion du débogage: L'utilisation du StringBuffer n'est plus indispensable. J'ai cependant appris durant ce débogage qu'il est préférable de passer par un StringBuffer lorsque l'on souhaite faire de multiples modifications à une chaine de type String. En effet, un nouvel objet String est recréé à chaque fois que celui-ci est modifié, le programme perd alors en performance. Je choisis donc de garder l'utilisation du StringBuffer ici. IV) Précisions à propos de certains points du projet: 1. Contrôle de saisi utilisateur: Le contrôle de saisi utilisateur se fait par une exception SQL lorsque la saisi ne correspond pas au type de donnée ou est trop long. Il ne gère cependant pas le type de caractère utilisé (Comme uniquement des numéros pour le téléphone)

2. Définition d'une classe: Une classe est définie comme ceci dans la base de données et le programme. Exemple: BTS SIO SLAM 2 ème année A, Session 2014 Nom de la formation Année de formation Nom de la session Année de la session 3. Design: Voici comment est géré le redimensionnement de la fenêtre principal: = = Info élève (toute la partie supérieure) = Tableau = = Le tableau se redimensionne tout seul = Légende: = Fixe, pas de redimensionnement possible

Se redimensionne automatiquement 4. La création de la base de données: Je me suis servi du logiciel MYSQL Workbench afin de créer la base de données puis l'exporter sur MYSQL avec son option "forward enginner SQL CREATE SCRIPT". Le projet Workbench est disponible dans le.zip du projet. Vous trouverez en figure1 une vue complète de la base de données créé en essayant d'imaginer le maximum de contraintes que puisse faire fasse un établissement d'enseignement. Vous trouverez en figure2 une vue cette même base de données avec les informations à prendre en compte pour sa réalisation. J'ai cependant eu des difficultés pour exporter la base car le logiciel créait les contraintes en même temps que les tables, il faisait donc parfois appel à une table inconnu. Pour résoudre le problème je n'ai pas exporté les contraintes dans un premier temps (Workbench propose un grand nombre d'option), j'ai ensuite importé le projet à MYSQL, puis j'ai réexporté mon projet Workbench, avec cette fois les contraintes ainsi que la suppression de la table avant sa création. Les contraintes faisaient alors appel à des tables présentes dans la base de données. J'ai enfin importé à MYSQL cette dernière. La seconde exportation SQL est disponible dans le.zip du projet (Drop table if exist + constraints). V) Les améliorations que je souhaite effectuer: Dans la classe d'affichage Rechercher_eleve, j'utilise le même comportement que dans Jquerypanel pour afficher et sélectionner la classe de l'élève. J'aimerais utiliser les classes tel que Rechercher_eleve en Jpannel et utiliser une classe global pour les gérer et ainsi pouvoir réutiliser des bouts d'affichages, permettant alors Moins d'écriture, gains de temps, et un logiciel plus léger. La Fonction recherche utilise un arbre de condition afin de placer dans le bon ordre les éléments de la requête SQL. Je souhaite trouver une solution plus simple. J'ai finalement simplement utilisé un index qui s'incrémente lorsqu'une condition est remplie. Quand on quitte rechercher_elever et nouveau_eleve cela détruit l'élément et retourne donc la fonction, alors qu'une action d'annulation est préférable lors de la fermeture de la fenêtre par l'utilisateur. J'aimerais trouver un moyen d'annuler l'action qui suit l'appel de la fonction lorsque l'utilisateur quitte la fenêtre. Je souhaite aussi créer et respecter une norme spéciale d'écriture et d'indentation. Comme le programme peut être possiblement repris par un autre développeur, il faut que le code ait un maximum de clarté. Lors de mon prochain projet en groupe ou même tout seul, mais répondant à une demande d'un client, je souhaite utiliser un plugin Netbeans afin d'avoir le temps d'édition d'un projet. En effet, il est préférable de pouvoir précisément connaitre le temps passé sur un projet afin d'en connaitre son

coût pour le client ou l'entreprise. Dans un projet de groupe, l'utilisation d'un SVN (Subversion serveur) peut, en plus de gérer les versions faire la tache souhaitée. J'aimerais aussi apporter quelques modifications afin d'optimiser les performances: -Remplacer les imports globaux par des appels exclusifs. -Incorporer la class session.java à LoginJFrame.java afin d'éviter la création d'un objet utilisant les mêmes variables ne soit créer, réduisant ainsi l'espace mémoire utilisé. Enfin le projet peut se voir ajouter une multitude de classes afin d'augmenter ses fonctionnalités. La structure de la base de données permet par exemple une gestion complète des élèves, avec une construction des bulletins.