Loading

Alison's New App is now available on iOS and Android! Download Now

Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Jusqu'à présent, nous avons créé un écran avec une zone d'entrée et 3 boutons pour l'enregistrement, les dépenseset le rapport. Le registre affiche les utilisateurs enregistrés dans la base de données. Toutefois, ces utilisateurs étaientenregistrés à l'aide de MySQL à partir de l'invite de commande.
L'étape suivante consiste à essayer d'enregistrer un utilisateur à partir du navigateur, ce qui représente une attenteraisonnable pour un utilisateur de l'application Web. La mise à jour de la base de données et la gestion de l'entrée utilisateursoulève plusieurs nouveaux problèmes, tels que1. Chaque fois qu'un nouvel utilisateur est invité à être enregistré, vérifiez que le nom d'utilisateurexiste déjà et qu'il doit choisir un nouveau nom d'utilisateur.2. Entrer les dépenses: Si, par erreur, une dépense supplémentaire ou incorrecte est ajoutée à la table des dépenses, une fonctionnalité supplémentaire permettant d'éditer ou de supprimer une ligneprécédemment entrée doit être conçue.
Pour ce faire, nous allons utiliser une combinaison d'installations de base de données et apporter certaines modificationsà l'application existante.
Envisagez le programme de test simple suivant: insertdb.java, où nous essayons d'insérer des enregistrements dansbase de données.
La plupart des instructions sont familières.● Nous créons une connexion de base de données à l'aide du pilote de base de données et l'instructiondoit être exécutée sur le nptel de base de données spécifié dans l'URL à l'aide de la norme jdbc.● Le bloc try a rv=stmt.executeUpdate (“ insert into users2values (0,2, ’ f1 ’) ”) ;● Bien qu'il s'agit d'une requête de mise à jour simple, la différence importante provenant des scénarios précédentsest susceptible de se produire, car nous mettons à jour la base de données (contrairement à l'interrogation oùn'est lu que depuis la base de données). Nous devons intercepter les exceptions à l'aide de l'objetSQLException standard qui contient beaucoup d'informations.● L'objet SQLException a un message, un état SQL, un code d'erreur et un champ de cause. L'état SQLest une norme de langage SQL.
● Dans la page Web MySQL, nous pouvons trouver le mappage des numéros d'erreur MySQL au codede l'état SQL.● Nous rencontrerons 42S02 dans l'application Web créée jusqu'à présent, queER_BAD_TABLE_ERROR.● Nous imprimons le message et fermez la base de données.Il s'agit simplement d'un programme de test. Compilez le fichier insertdb.java à l'aide de javac insertdb.javaet exécutez Java insertdb. Ce message d'erreur est généré:
Message d'erreur: Table ‘ nptel.users2 ’ doesn ’ t existe.Ceci est dû au fait que nous ne l'avons pas encore créé. Cette raison pour l'exécuter avant la création étaitpour illustrer la description de l'erreur.
Le texte mis en évidence comporte une zone de message d'objet SQLException. L'état est unstandard à partir de SQL, la valeur est 42S02 comme prévu. MariaDB ’ s MySQL a également des codes d'état qui expliquentle type d'erreur, dans ce cas sa valeur est 1146.
Pour corriger l'erreur, créez un utilisateur de table2.
Maintenant exécutez insertdb à l'aide de java insertdb, elle génère rv=1. Il s'agit du nombre de lignes dans
utilisateurs2. Cela signifie que la requête d'insertion dans insertdb.java a abouti.
L'invite de commande de gauche exécute insertdb après la création de la table users2, la table mise à jour estaffichée à l'invite de commande de droite comme sortie pour la requête select * from users2.
Pour vous assurer qu'il n'est pas possible d'entrer le même nom d'utilisateur à l'aide d'une contrainte unique, tout comme les clés primairesdoivent être uniques, nous pouvons également vous assurer que le nom d'utilisateur est unique.
Si nous essayons d'insérer la même ligne, il y a une exception qui est que la cléf1 en double est entrée pour uname et cette fois le code de statut passe à 23 000 et le codemariadb est 1062. 23000 est le code d'erreur standard de ER_DUP_ENTRY.
Le moyen habituel de corriger les erreurs consiste à rechercher le code d'état (ici, ER_DUP_ENTRY, quisignifie qu'une entrée en double a été effectuée).
CONSEIL:Lorsque nous utilisons des sites Web, presque tous exigent que les utilisateurs s'enregistrent et s'identifientdepuis le nom, la ville, etc., n'est pas nécessairement unique ou il peut aussi être le cas que quelqu'unpuisse facilement vous personaliser en connaissant vos détails. Au lieu de cela, nous créons une nouvelle identité ou vous utilisezune identité qui est déjà connue pour être unique telle que l'adresse e-mail Yahoo où certains tierscomme Yahoo ou Google ont pris soin que les ID de messagerie sont uniques pour finalement atteindreune notion stable d'identité d'utilisateur pour votre application.
Dans le code précédent, nous avons créé une table sans contrainte unique, puis l'avons ajoutée parqui la modifie. L'alternative consiste à utiliser cette déclaration unique dans le schéma de la table en tant queci-dessous.
Par exemple, si vous voulez voir comment cette unicité est réalisée, utilisez les index d'affichage deusers2 ;
La page d'enregistrement du site Web doit avoir la fonctionnalité d'affichage des erreurs. En revanche,crée un nouvel écran avec une adresse URL différente pour l'affichage des requêtes qui entraînent une erreur.
Le bon endroit pour renvoyer une erreur de ce type est une question de conception de l'interface utilisateur.
Dans la page d'enregistrement elle-même, nous avons la zone d'entrée qui correspond à la zone d'entrée affichéeici, mais dans la page d'erreur d'enregistrement, nous ajoutons une autre ligne (mise en évidence dans la figure ci-dessus)en plus de la zone d'entrée.
Un concepteur peut préférer que le message d'erreur soit centré ou alignant sur le côté gauche dela zone d'entrée. Tous ces effets peuvent être atteints, mais il est moche de les atteindre avec les tableaux.CSS est mieux mais il a besoin d'une plus grande connaissance de CSS que ce que nous avons appris.
Page d'erreur avec un style supplémentaire appelé contour: 1px bleu solide. Ceci est fait pour afficher
comment la première ligne comporte une table avec 2 lignes, il y a donc une table dans une table.
Comme nous le savons, la partie principale de la structure est une ligne de boutons, une ligne avec la zone d'entrée,, mais cette zone d'entrée se compose en fait d'une table qui contient elle-même la zone d'entréeet la deuxième ligne contient le texte du message d'erreur. Cette opération et leur dimensionnement peuvent être fastidieux.
CSS permet de créer plus facilement des applications qui fonctionnent pour les mobiles, les tablettes ainsi quesites Webnormaux.
L'interface utilisateur est affectée en fonction de l'entrée dans la zone d'entrée. L'interface utilisateur devientplus dynamique, car l'application doit détecter la présence ou l'absence d'erreurs et produire différents fichiers HTML.Nous voulons afficher la sortie suivante lorsqu'un utilisateur abc2 déjà créé est à nouveau enregistré:
Nous allons ajouter deux choses au fichier FairShareDb.java:
● La partie mise à jour est effectuée dans une fonction appelée registerUser (req, out) queprend la demande et la sortie. Cette sortie est le PrintWriter que nous obtenons à partir de l'objet de réponse.● Récupère tous les utilisateurs enregistrés dans la partie requête et ceci est inclus dans le modèle comme nous l'avons déjà vu.
L'horodatage unix est évalué côté serveur, il s'agit d'une fonction SQL:unix_timestamp (). La zone howmany stocke le nombre de lignes affectées à partir de la requête de registre exécutée précédemment par.
Lorsqu'il existe une exception, l'état SQL est vérifié pour une entrée en double à l'aide desqlState.equals (SQLSTATEDUP). Nous allons définir l'attribut dans la demande quedit “ yes ”, il y a un utilisateur en double et nous allons également envoyer le nom d'utilisateur qui esttentée pour être dupliquée, de sorte que le message d'erreur puisse contenir ce queutilisateur a exactementdupliquée.
Si le code d'état SQL est autre chose, nous allons simplement effectuer un vidage de l'exception SQL et, puis fermez l'instruction. Nous allons prendre des mesures avec des types d'erreur d'entrée en double.
Exécutez la requête et le résultat est une liste de mappes, définissez l'attribut de données utilisateur et accédez à la fonctionregister.jsp. Une nouveauté dans ce cas est que ce modèle fait 2 choses différentes basées sur, qu'il y ait ou non un utilisateur en double. Comme nous l'avons vu, l'objectif est d'ajouter une ligne contenant le message d'erreuruniquement s'il existe un utilisateur en double et s'il existe un tel utilisateur, vousmentionner ce qu'il s'agit.
Vous avez peut-être remarqué que l'erreur a été imprimée en texte de couleur rouge à l'aide de la classe CSS:tdError.
tdError class: Color should be red, police style is italic, police size is large i.e. just supérieure thandefault font, align to the center. Les deux classes CSS ci-dessus ont été utilisées pour obtenir la présentation de la tablede la dernière fois.
La validation commence à devenir très importante lorsque des updations sont effectuées. Pour faire la démonstration, cliquez sur l'utilisateur du registresans entrée dans la zone d'entrée. Puisque le nom d'utilisateur ! =null est présent dans le code, s'il n'y a pas de nom d'utilisateur, il existe une nouvelle ligne dans la table avec un nom vide, bien que le comportement attendu deen tant qu'utilisateur final du site Web puisse être de ne pas ajouter de ligne à la table.
La validation utilisateur est beaucoup plus importante que l'exemple simple. Pour le démontrer, nous avons d'abordeffectuer une modification pour rejeter la chaîne vide si le nom d'utilisateur est vide.
Nous devons vous assurer que rien n'échoue lorsque la table est vide, mais notre site Web affiche une erreur.
Le test d'une base de données doit être automatisé, mais il s'agit d'une caractéristique du développement Webmoderne, où la plupart d'entre eux sont testés dans une version.
Dans notre cas, nous pourrions utiliser le tomcat intégré, mais il y a plusieurs façons d'automatiser. Une fois quea changé, que la saisie et la vérification des détails commencent à devenir la fonction de votre application, la durée de vie deest considérablement plus difficile. Même en ajoutant un seul devis (‘) à l'entrée émet une exceptionque notre application ne peut pas gérer, il rejette simplement la trace de pile. Une entrée incorrecte est donc
dur à gérer.
Nous utilisons le concept de déclarations préparées pour réaliser de meilleurs tests. Dans certaines circonstances, elles peuvent également être plus efficaces, en particulier lorsqu'elles sont utilisées dans des boucles. Elle spécifiela base de données dans laquelle une partie de l'instruction est spécifiée par le développeur et quelle partie est à veniren tant qu'entrée des utilisateurs, de sorte que la base de données ne traite pas ce dernier comme quelque chose dont la syntaxeque la base de données doit comprendre, elle nettosera l'entrée utilisateur d'isolat, puis la stockera séparémentsans la laisser affecter le reste de l'instruction.
Dans notre exemple, rien n'est irrémédiablement rompu, seule la requête est affectée. pouvons donc recharger la page pour effacer l'exécution précédente.
Au lieu de créer simplement une instruction, nous allons créer une instruction préparée où, au niveau, la requête est également fournie. L'instruction préparée contactera la base de données,compilera l'instruction préparée, c'est une autre raison en raison de la précompilation que les instructions préparées parpeuvent être plus efficaces et dans l'instruction préparée, nous allons laisserun trou, un paramètre dans lequel la valeur utilisateur sera branchée. La méthode habituelle pour effectuer cette procédure est la suivante:a un? Dire que c'est là que nous allons brancher une valeur. Le reste reste le même queavant.
Ainsi, vous obtenez le nom d'utilisateur comme auparavant, terminez votre validation, puis dites upd.setString (1, username) ; et parce que la requête est déjà connue tout ce que vous avez à faireest exécuter la mise à jour comme indiqué ci-dessus.L'idée est que vous ne spécifiez pas de mauvaise entrée, vous spécifiez uniquement ce qu'est une bonne entrée,Ainsi, même si la base de données, le code SQL standard peut ne pas être approuvé lorsqu'il est écrit dans une chaîne de caractères,
Vous pouvez utiliser la même idée pour les dépenses. A ce stade, nous aurons en faitpresque une application de base de données complète dans laquelle la seule chose qui est différente est que différents utilisateursne peuvent pas accéder au système en même temps.
Donc, à ce stade, nous avons une application raisonnablement complète.
Nous n'avons cependant pas de suppression d'opérations telles que la suppression d'un utilisateur, mais ce n'est pas différent dece que nous avons fait jusqu'à présent. Tout comme nous l'avons fait, créez un autre bouton appelé unregisterqui permet de supprimer la ligne de la base de données avec le nom d'utilisateur fourni.
Une fois que nous avons ajouté une connexion et des cookies, notre application sera essentiellement complète et vous aurez vutoutes les pièces, y compris divers scénarios de débogage qui s'affichent lorsqu'une application Web doit êtredéveloppée.