13-BaseDeDonnees.html 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="generator" content="pandoc" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  7. <title>Base de données</title>
  8. <style type="text/css">
  9. code{white-space: pre-wrap;}
  10. span.smallcaps{font-variant: small-caps;}
  11. span.underline{text-decoration: underline;}
  12. div.column{display: inline-block; vertical-align: top; width: 50%;}
  13. </style>
  14. <style type="text/css">
  15. a.sourceLine { display: inline-block; line-height: 1.25; }
  16. a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
  17. a.sourceLine:empty { height: 1.2em; position: absolute; }
  18. .sourceCode { overflow: visible; }
  19. code.sourceCode { white-space: pre; position: relative; }
  20. div.sourceCode { margin: 1em 0; }
  21. pre.sourceCode { margin: 0; }
  22. @media screen {
  23. div.sourceCode { overflow: auto; }
  24. }
  25. @media print {
  26. code.sourceCode { white-space: pre-wrap; }
  27. a.sourceLine { text-indent: -1em; padding-left: 1em; }
  28. }
  29. pre.numberSource a.sourceLine
  30. { position: relative; }
  31. pre.numberSource a.sourceLine:empty
  32. { position: absolute; }
  33. pre.numberSource a.sourceLine::before
  34. { content: attr(data-line-number);
  35. position: absolute; left: -5em; text-align: right; vertical-align: baseline;
  36. border: none; pointer-events: all;
  37. -webkit-touch-callout: none; -webkit-user-select: none;
  38. -khtml-user-select: none; -moz-user-select: none;
  39. -ms-user-select: none; user-select: none;
  40. padding: 0 4px; width: 4em;
  41. color: #aaaaaa;
  42. }
  43. pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
  44. div.sourceCode
  45. { }
  46. @media screen {
  47. a.sourceLine::before { text-decoration: underline; }
  48. }
  49. code span.al { color: #ff0000; font-weight: bold; } /* Alert */
  50. code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
  51. code span.at { color: #7d9029; } /* Attribute */
  52. code span.bn { color: #40a070; } /* BaseN */
  53. code span.bu { } /* BuiltIn */
  54. code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
  55. code span.ch { color: #4070a0; } /* Char */
  56. code span.cn { color: #880000; } /* Constant */
  57. code span.co { color: #60a0b0; font-style: italic; } /* Comment */
  58. code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
  59. code span.do { color: #ba2121; font-style: italic; } /* Documentation */
  60. code span.dt { color: #902000; } /* DataType */
  61. code span.dv { color: #40a070; } /* DecVal */
  62. code span.er { color: #ff0000; font-weight: bold; } /* Error */
  63. code span.ex { } /* Extension */
  64. code span.fl { color: #40a070; } /* Float */
  65. code span.fu { color: #06287e; } /* Function */
  66. code span.im { } /* Import */
  67. code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
  68. code span.kw { color: #007020; font-weight: bold; } /* Keyword */
  69. code span.op { color: #666666; } /* Operator */
  70. code span.ot { color: #007020; } /* Other */
  71. code span.pp { color: #bc7a00; } /* Preprocessor */
  72. code span.sc { color: #4070a0; } /* SpecialChar */
  73. code span.ss { color: #bb6688; } /* SpecialString */
  74. code span.st { color: #4070a0; } /* String */
  75. code span.va { color: #19177c; } /* Variable */
  76. code span.vs { color: #4070a0; } /* VerbatimString */
  77. code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
  78. </style>
  79. <link rel="stylesheet" href="pandoc.css">
  80. <!--[if lt IE 9]>
  81. <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  82. <![endif]-->
  83. </head>
  84. <body>
  85. <div class="doctitle">Base de données</div>
  86. <nav id="TOC">
  87. <ul>
  88. <li><a href="#accès-à-une-base-de-données">Accès à une base de données</a><ul>
  89. <li><a href="#introduction">Introduction</a></li>
  90. <li><a href="#accès-à-une-base-mysql">Accès à une base MySQL</a><ul>
  91. <li><a href="#installation">Installation</a></li>
  92. <li><a href="#utilisation">Utilisation</a></li>
  93. </ul></li>
  94. <li><a href="#exercice">Exercice</a></li>
  95. <li><a href="#ecrire-dans-les-bases-de-données">Ecrire dans les bases de données</a></li>
  96. <li><a href="#pour-aller-plus-loin">Pour aller plus loin</a></li>
  97. </ul></li>
  98. </ul>
  99. </nav>
  100. <h1 id="accès-à-une-base-de-données">Accès à une base de données</h1>
  101. <h2 id="introduction">Introduction</h2>
  102. <p>Nous allons utiliser JDBC pour accéder à une base de données. Il existe d’autres librairies qui permettent l’accès aux bases de données, avec des fonctionnalités plus avancées (par exemple JPA ou Hibernate).</p>
  103. <p>Cependant JDBC est l’API de bas niveau qui est utilisée par toutes celles de plus haut niveau.</p>
  104. <p>Nous allons donc découvrir le fonctionnement de cette API et voir comment on peut <em>mapper</em> (c’est-à-dire associer) les entrées d’une base de données avec les membres d’une classe. Ceci revient à faire correspondre les valeurs d’une table aux attributs d’une classe.</p>
  105. <h2 id="accès-à-une-base-mysql">Accès à une base MySQL</h2>
  106. <h3 id="installation">Installation</h3>
  107. <p>Pour commencer, vous allez écrire le programme suivant et le lancer:</p>
  108. <div class="sourceCode" id="cb1"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="kw">package</span><span class="im"> fr.greta.dwm2.database;</span></a>
  109. <a class="sourceLine" id="cb1-2" data-line-number="2"></a>
  110. <a class="sourceLine" id="cb1-3" data-line-number="3"><span class="kw">import</span><span class="im"> java.sql.*;</span></a>
  111. <a class="sourceLine" id="cb1-4" data-line-number="4"></a>
  112. <a class="sourceLine" id="cb1-5" data-line-number="5"><span class="kw">public</span> <span class="kw">class</span> Demo {</a>
  113. <a class="sourceLine" id="cb1-6" data-line-number="6"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {</a>
  114. <a class="sourceLine" id="cb1-7" data-line-number="7"> <span class="co">//Commençons par charger le pilote:</span></a>
  115. <a class="sourceLine" id="cb1-8" data-line-number="8"> <span class="kw">try</span> {</a>
  116. <a class="sourceLine" id="cb1-9" data-line-number="9"> <span class="bu">Class</span>.<span class="fu">forName</span>(<span class="st">&quot;com.mysql.jdbc.Driver&quot;</span>);</a>
  117. <a class="sourceLine" id="cb1-10" data-line-number="10"> } <span class="kw">catch</span> (<span class="bu">ClassNotFoundException</span> e) {</a>
  118. <a class="sourceLine" id="cb1-11" data-line-number="11"> e.<span class="fu">printStackTrace</span>();</a>
  119. <a class="sourceLine" id="cb1-12" data-line-number="12"> }</a>
  120. <a class="sourceLine" id="cb1-13" data-line-number="13"></a>
  121. <a class="sourceLine" id="cb1-14" data-line-number="14"> }</a>
  122. <a class="sourceLine" id="cb1-15" data-line-number="15">}</a></code></pre></div>
  123. <p>Lancez ce programme. Vous constatez un erreur et c’est normal !</p>
  124. <p>Ce programme ne va pas marcher car il lui manque un connecteur que vous allez télécharger <a href="https://dev.mysql.com/downloads/connector/j/">sur le site de MySQL</a></p>
  125. <p>Choisissez une des deux archives, téléchargez-la et décompressez-la.</p>
  126. <p>Ce connecteur est une librairie qu’il faut ajouter à votre projet.</p>
  127. <p>Pour cela, ouvrez les propriétés du projet (bouton droit et <code>Properties</code>) et allez sur <code>Java Build Path</code> puis <code>Libraries</code></p>
  128. <figure>
  129. <img src="images/librairies.png" alt="Propriété du projet" /><figcaption>Propriété du projet</figcaption>
  130. </figure>
  131. <p>Cliquez sur <code>Add Library...</code></p>
  132. <figure>
  133. <img src="images/add_library_1.png" alt="Ajout de librairie" /><figcaption>Ajout de librairie</figcaption>
  134. </figure>
  135. <p>Sélectionnez <code>User Library</code> et cliquez sur <code>Next</code></p>
  136. <figure>
  137. <img src="images/add_library_2.png" alt="Ajout de librairie" /><figcaption>Ajout de librairie</figcaption>
  138. </figure>
  139. <p>Cliquez sur <code>User Libraries...</code></p>
  140. <figure>
  141. <img src="images/add_library_3.png" alt="Ajout de librairie" /><figcaption>Ajout de librairie</figcaption>
  142. </figure>
  143. <p>Cliquez sur <code>New...</code> et entrez comme nom : <code>Connecteur MySQL</code></p>
  144. <p>Sélectionnez la nouvelle librairie et cliquez sur <code>Add External JARs...</code></p>
  145. <p>Sélectionnez le fichier <code>mysql-connector-java-X.Y.ZZ-bin.jar</code> qui était dans l’archive puis validez les modifications</p>
  146. <p>Cliquez sur <code>Source attachment</code> puis sur <code>Edit...</code></p>
  147. <figure>
  148. <img src="images/add_library_4.png" alt="Ajout de librairie" /><figcaption>Ajout de librairie</figcaption>
  149. </figure>
  150. <p>Choisissez <code>External location</code> puis <code>External Folder...</code> et sélectionnez le répertoire <code>src</code> qui est dans le même dossier que le fichier JAR précédent.</p>
  151. <p>Validez toutes les modifications pour sortir des préférences</p>
  152. <figure>
  153. <img src="images/add_library_5.png" alt="Ajout de librairie" /><figcaption>Ajout de librairie</figcaption>
  154. </figure>
  155. <p>Cliquez sur <code>Finish</code> puis sur <code>OK</code></p>
  156. <p>Relancez le programme: aucune erreur n’apparaît, vous avez chargé un pilote pour le connecteur MySQL.</p>
  157. <h3 id="utilisation">Utilisation</h3>
  158. <h4 id="création-dune-base-de-données-de-test">Création d’une base de données de test</h4>
  159. <p>Vous pouvez soit utiliser <a href="exemples/demojava.sql">ce fichier</a>, soit suivre les instructions ci-dessous.</p>
  160. <div class="sourceCode" id="cb2"><pre class="sourceCode sql"><code class="sourceCode sql"><a class="sourceLine" id="cb2-1" data-line-number="1">mysql&gt; <span class="kw">create</span> <span class="kw">database</span> demojava ;</a>
  161. <a class="sourceLine" id="cb2-2" data-line-number="2"><span class="kw">Database</span> changed</a>
  162. <a class="sourceLine" id="cb2-3" data-line-number="3"></a>
  163. <a class="sourceLine" id="cb2-4" data-line-number="4">mysql&gt; show <span class="kw">tables</span> ;</a>
  164. <a class="sourceLine" id="cb2-5" data-line-number="5"><span class="kw">Empty</span> <span class="kw">set</span> (<span class="fl">0.00</span> sec)</a></code></pre></div>
  165. <p>Nous allons maintenant définir les privilèges d’accès à la base de données:</p>
  166. <div class="sourceCode" id="cb3"><pre class="sourceCode sql"><code class="sourceCode sql"><a class="sourceLine" id="cb3-1" data-line-number="1">mysql&gt;</a>
  167. <a class="sourceLine" id="cb3-2" data-line-number="2"><span class="kw">CREATE</span> <span class="fu">USER</span> <span class="st">&#39;demouser&#39;</span>@<span class="st">&#39;%&#39;</span> <span class="kw">IDENTIFIED</span> <span class="kw">BY</span> <span class="st">&#39;MotDePasse&#39;</span>;</a>
  168. <a class="sourceLine" id="cb3-3" data-line-number="3"></a>
  169. <a class="sourceLine" id="cb3-4" data-line-number="4">mysql&gt; <span class="kw">GRANT</span> <span class="kw">ALL</span> <span class="kw">PRIVILEGES</span> <span class="kw">ON</span> demojava.* <span class="kw">TO</span> <span class="ot">&quot;demouser&quot;</span>@<span class="ot">&quot;%&quot;</span> <span class="kw">IDENTIFIED</span> <span class="kw">BY</span> <span class="ot">&quot;MotDePasse&quot;</span>;</a>
  170. <a class="sourceLine" id="cb3-5" data-line-number="5"><span class="kw">Query</span> OK, <span class="dv">0</span> <span class="kw">rows</span> affected (<span class="fl">0.00</span> sec)</a></code></pre></div>
  171. <p>Le <code>%</code> signifie que n’importe quelle machine pourra se connecter, ce qui n’est pas forcément une bonne chose.</p>
  172. <p>On pourra le remplacer soit par l’IP de l’hôte si elle est fixe, soit par <code>localhost</code>.</p>
  173. <p>Puis créer la table de démonstration:</p>
  174. <div class="sourceCode" id="cb4"><pre class="sourceCode sql"><code class="sourceCode sql"><a class="sourceLine" id="cb4-1" data-line-number="1">mysql&gt; <span class="kw">create</span> <span class="kw">table</span> personne (nom <span class="dt">varchar</span>(<span class="dv">64</span>), prenom <span class="dt">varchar</span>(<span class="dv">64</span>), dnaissance <span class="dt">date</span>);</a>
  175. <a class="sourceLine" id="cb4-2" data-line-number="2"><span class="kw">Query</span> OK, <span class="dv">0</span> <span class="kw">rows</span> affected (<span class="fl">0.01</span> sec)</a>
  176. <a class="sourceLine" id="cb4-3" data-line-number="3"></a>
  177. <a class="sourceLine" id="cb4-4" data-line-number="4">mysql&gt; show <span class="kw">tables</span> ;</a>
  178. <a class="sourceLine" id="cb4-5" data-line-number="5">+<span class="co">--------------------+</span></a>
  179. <a class="sourceLine" id="cb4-6" data-line-number="6">| Tables_in_demojava |</a>
  180. <a class="sourceLine" id="cb4-7" data-line-number="7">+<span class="co">--------------------+</span></a>
  181. <a class="sourceLine" id="cb4-8" data-line-number="8">| personne |</a>
  182. <a class="sourceLine" id="cb4-9" data-line-number="9">+<span class="co">--------------------+</span></a>
  183. <a class="sourceLine" id="cb4-10" data-line-number="10"><span class="dv">1</span> <span class="kw">row</span> <span class="kw">in</span> <span class="kw">set</span> (<span class="fl">0.00</span> sec)</a></code></pre></div>
  184. <p>On peut voir la définition de la table avec la commande suivante:</p>
  185. <div class="sourceCode" id="cb5"><pre class="sourceCode sql"><code class="sourceCode sql"><a class="sourceLine" id="cb5-1" data-line-number="1">mysql&gt; describe personne;</a>
  186. <a class="sourceLine" id="cb5-2" data-line-number="2">+<span class="co">------------+-------------+------+-----+---------+-------+</span></a>
  187. <a class="sourceLine" id="cb5-3" data-line-number="3">| Field | <span class="kw">Type</span> | <span class="kw">Null</span> | <span class="kw">Key</span> | <span class="kw">Default</span> | Extra |</a>
  188. <a class="sourceLine" id="cb5-4" data-line-number="4">+<span class="co">------------+-------------+------+-----+---------+-------+</span></a>
  189. <a class="sourceLine" id="cb5-5" data-line-number="5">| nom | <span class="dt">varchar</span>(<span class="dv">64</span>) | YES | | <span class="kw">NULL</span> | |</a>
  190. <a class="sourceLine" id="cb5-6" data-line-number="6">| prenom | <span class="dt">varchar</span>(<span class="dv">64</span>) | YES | | <span class="kw">NULL</span> | |</a>
  191. <a class="sourceLine" id="cb5-7" data-line-number="7">| dnaissance | <span class="dt">date</span> | YES | | <span class="kw">NULL</span> | |</a>
  192. <a class="sourceLine" id="cb5-8" data-line-number="8">+<span class="co">------------+-------------+------+-----+---------+-------+</span></a>
  193. <a class="sourceLine" id="cb5-9" data-line-number="9"><span class="dv">3</span> <span class="kw">rows</span> <span class="kw">in</span> <span class="kw">set</span> (<span class="fl">0.01</span> sec)</a></code></pre></div>
  194. <p>On ajoute une entrée:</p>
  195. <div class="sourceCode" id="cb6"><pre class="sourceCode sql"><code class="sourceCode sql"><a class="sourceLine" id="cb6-1" data-line-number="1">mysql&gt; <span class="kw">insert</span> <span class="kw">into</span> personne <span class="kw">values</span> (<span class="st">&#39;Luther King&#39;</span>,<span class="st">&#39;Martin&#39;</span>,<span class="st">&#39;1929-01-15&#39;</span>);</a>
  196. <a class="sourceLine" id="cb6-2" data-line-number="2"><span class="kw">Query</span> OK, <span class="dv">1</span> <span class="kw">row</span> affected (<span class="fl">0.01</span> sec)</a>
  197. <a class="sourceLine" id="cb6-3" data-line-number="3"></a>
  198. <a class="sourceLine" id="cb6-4" data-line-number="4">mysql&gt; <span class="kw">select</span> * <span class="kw">from</span> personne ;</a>
  199. <a class="sourceLine" id="cb6-5" data-line-number="5">+<span class="co">-------------+--------+------------+</span></a>
  200. <a class="sourceLine" id="cb6-6" data-line-number="6">| nom | prenom | dnaissance |</a>
  201. <a class="sourceLine" id="cb6-7" data-line-number="7">+<span class="co">-------------+--------+------------+</span></a>
  202. <a class="sourceLine" id="cb6-8" data-line-number="8">| Luther King | Martin | <span class="dv">1929-01-15</span> |</a>
  203. <a class="sourceLine" id="cb6-9" data-line-number="9">+<span class="co">-------------+--------+------------+</span></a>
  204. <a class="sourceLine" id="cb6-10" data-line-number="10"><span class="dv">1</span> <span class="kw">row</span> <span class="kw">in</span> <span class="kw">set</span> (<span class="fl">0.00</span> sec)</a></code></pre></div>
  205. <h4 id="connecteur">Connecteur</h4>
  206. <p>Observez et analysez cet exemple :</p>
  207. <div class="sourceCode" id="cb7"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb7-1" data-line-number="1"><span class="kw">package</span><span class="im"> fr.greta.dwm2.database;</span></a>
  208. <a class="sourceLine" id="cb7-2" data-line-number="2"></a>
  209. <a class="sourceLine" id="cb7-3" data-line-number="3"><span class="kw">import</span><span class="im"> java.sql.*;</span></a>
  210. <a class="sourceLine" id="cb7-4" data-line-number="4"></a>
  211. <a class="sourceLine" id="cb7-5" data-line-number="5"><span class="kw">public</span> <span class="kw">class</span> ConnectionMySQL {</a>
  212. <a class="sourceLine" id="cb7-6" data-line-number="6"> <span class="kw">private</span> <span class="bu">Connection</span> connection = <span class="kw">null</span>;</a>
  213. <a class="sourceLine" id="cb7-7" data-line-number="7"> <span class="kw">private</span> <span class="bu">String</span> user, password, host;</a>
  214. <a class="sourceLine" id="cb7-8" data-line-number="8"></a>
  215. <a class="sourceLine" id="cb7-9" data-line-number="9"> <span class="kw">private</span> <span class="dt">static</span> <span class="dt">boolean</span> driverLoaded = <span class="kw">false</span>;</a>
  216. <a class="sourceLine" id="cb7-10" data-line-number="10"></a>
  217. <a class="sourceLine" id="cb7-11" data-line-number="11"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">boolean</span> <span class="fu">isDriverLoaded</span>(){</a>
  218. <a class="sourceLine" id="cb7-12" data-line-number="12"> <span class="kw">return</span> driverLoaded;</a>
  219. <a class="sourceLine" id="cb7-13" data-line-number="13"> }</a>
  220. <a class="sourceLine" id="cb7-14" data-line-number="14"></a>
  221. <a class="sourceLine" id="cb7-15" data-line-number="15"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">init</span>() <span class="kw">throws</span> <span class="bu">ClassNotFoundException</span>, <span class="bu">IllegalAccessException</span>, <span class="bu">InstantiationException</span>{</a>
  222. <a class="sourceLine" id="cb7-16" data-line-number="16"> <span class="kw">if</span>(!driverLoaded){</a>
  223. <a class="sourceLine" id="cb7-17" data-line-number="17"> <span class="co">//Chargement du pilote</span></a>
  224. <a class="sourceLine" id="cb7-18" data-line-number="18"> <span class="bu">Class</span>.<span class="fu">forName</span>(<span class="st">&quot;com.mysql.jdbc.Driver&quot;</span>).<span class="fu">newInstance</span>();</a>
  225. <a class="sourceLine" id="cb7-19" data-line-number="19"> driverLoaded = <span class="kw">true</span>;</a>
  226. <a class="sourceLine" id="cb7-20" data-line-number="20"> }</a>
  227. <a class="sourceLine" id="cb7-21" data-line-number="21"> }</a>
  228. <a class="sourceLine" id="cb7-22" data-line-number="22"></a>
  229. <a class="sourceLine" id="cb7-23" data-line-number="23"> <span class="kw">public</span> <span class="fu">ConnectionMySQL</span>() {</a>
  230. <a class="sourceLine" id="cb7-24" data-line-number="24"> <span class="kw">if</span>(!driverLoaded){</a>
  231. <a class="sourceLine" id="cb7-25" data-line-number="25"> <span class="kw">throw</span> <span class="kw">new</span> <span class="bu">IllegalStateException</span>(<span class="st">&quot;Cannot instantiate if driver is not loaded. Please call &quot;</span>+<span class="fu">getClass</span>().<span class="fu">getName</span>()+<span class="st">&quot;.init() method before invoking this constructor.&quot;</span>);</a>
  232. <a class="sourceLine" id="cb7-26" data-line-number="26"> }</a>
  233. <a class="sourceLine" id="cb7-27" data-line-number="27"> }</a>
  234. <a class="sourceLine" id="cb7-28" data-line-number="28"></a>
  235. <a class="sourceLine" id="cb7-29" data-line-number="29"> <span class="kw">public</span> <span class="fu">ConnectionMySQL</span>(<span class="bu">String</span> host, <span class="bu">String</span> user, <span class="bu">String</span> password) {</a>
  236. <a class="sourceLine" id="cb7-30" data-line-number="30"> <span class="kw">this</span>();</a>
  237. <a class="sourceLine" id="cb7-31" data-line-number="31"> <span class="kw">this</span>.<span class="fu">host</span> = host;</a>
  238. <a class="sourceLine" id="cb7-32" data-line-number="32"> <span class="kw">this</span>.<span class="fu">user</span> = user;</a>
  239. <a class="sourceLine" id="cb7-33" data-line-number="33"> <span class="kw">this</span>.<span class="fu">password</span> = password;</a>
  240. <a class="sourceLine" id="cb7-34" data-line-number="34"> }</a>
  241. <a class="sourceLine" id="cb7-35" data-line-number="35"></a>
  242. <a class="sourceLine" id="cb7-36" data-line-number="36"> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">connect</span>() <span class="kw">throws</span> <span class="bu">SQLException</span>{</a>
  243. <a class="sourceLine" id="cb7-37" data-line-number="37"> <span class="co">//Connexion a la base de données</span></a>
  244. <a class="sourceLine" id="cb7-38" data-line-number="38"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Connexion à la base de données&quot;</span>);</a>
  245. <a class="sourceLine" id="cb7-39" data-line-number="39"></a>
  246. <a class="sourceLine" id="cb7-40" data-line-number="40"> <span class="bu">String</span> dBurl = <span class="st">&quot;jdbc:mysql://&quot;</span>+host+<span class="st">&quot;/demojava&quot;</span>;</a>
  247. <a class="sourceLine" id="cb7-41" data-line-number="41"> connection = <span class="bu">DriverManager</span>.<span class="fu">getConnection</span>(dBurl, user, password);</a>
  248. <a class="sourceLine" id="cb7-42" data-line-number="42"></a>
  249. <a class="sourceLine" id="cb7-43" data-line-number="43"> <span class="co">/*</span></a>
  250. <a class="sourceLine" id="cb7-44" data-line-number="44"><span class="co"> * Autre utilisation possible:</span></a>
  251. <a class="sourceLine" id="cb7-45" data-line-number="45"><span class="co"> String dBurl = &quot;jdbc:mysql://&quot;+host+&quot;/demojava&quot;</span></a>
  252. <a class="sourceLine" id="cb7-46" data-line-number="46"><span class="co"> + &quot;?user=&quot;+user+&quot;&amp;password=&quot;+password;</span></a>
  253. <a class="sourceLine" id="cb7-47" data-line-number="47"><span class="co"> connection = DriverManager.getConnection(dBurl);</span></a>
  254. <a class="sourceLine" id="cb7-48" data-line-number="48"><span class="co"> */</span></a>
  255. <a class="sourceLine" id="cb7-49" data-line-number="49"></a>
  256. <a class="sourceLine" id="cb7-50" data-line-number="50"> }</a>
  257. <a class="sourceLine" id="cb7-51" data-line-number="51"> <span class="kw">public</span> <span class="bu">ResultSet</span> <span class="fu">execute</span>(<span class="bu">String</span> requete) <span class="kw">throws</span> <span class="bu">SQLException</span>{</a>
  258. <a class="sourceLine" id="cb7-52" data-line-number="52"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;creation et execution de la requête :&quot;</span>+requete);</a>
  259. <a class="sourceLine" id="cb7-53" data-line-number="53"> <span class="bu">Statement</span> stmt = connection.<span class="fu">createStatement</span>();</a>
  260. <a class="sourceLine" id="cb7-54" data-line-number="54"> <span class="kw">return</span> stmt.<span class="fu">executeQuery</span>(requete);</a>
  261. <a class="sourceLine" id="cb7-55" data-line-number="55"> }</a>
  262. <a class="sourceLine" id="cb7-56" data-line-number="56"></a>
  263. <a class="sourceLine" id="cb7-57" data-line-number="57"> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">close</span>() <span class="kw">throws</span> <span class="bu">SQLException</span>{</a>
  264. <a class="sourceLine" id="cb7-58" data-line-number="58"> connection.<span class="fu">close</span>();</a>
  265. <a class="sourceLine" id="cb7-59" data-line-number="59"> }</a>
  266. <a class="sourceLine" id="cb7-60" data-line-number="60">}</a></code></pre></div>
  267. <p>Méthode <code>main</code> :</p>
  268. <div class="sourceCode" id="cb8"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb8-1" data-line-number="1"><span class="kw">package</span><span class="im"> fr.greta.dwm2.database;</span></a>
  269. <a class="sourceLine" id="cb8-2" data-line-number="2"></a>
  270. <a class="sourceLine" id="cb8-3" data-line-number="3"><span class="kw">import</span><span class="im"> java.sql.ResultSet;</span></a>
  271. <a class="sourceLine" id="cb8-4" data-line-number="4"><span class="kw">import</span><span class="im"> java.sql.ResultSetMetaData;</span></a>
  272. <a class="sourceLine" id="cb8-5" data-line-number="5"><span class="kw">import</span><span class="im"> java.sql.SQLException;</span></a>
  273. <a class="sourceLine" id="cb8-6" data-line-number="6"></a>
  274. <a class="sourceLine" id="cb8-7" data-line-number="7"><span class="kw">public</span> <span class="kw">class</span> AfficherTablePersonne {</a>
  275. <a class="sourceLine" id="cb8-8" data-line-number="8"></a>
  276. <a class="sourceLine" id="cb8-9" data-line-number="9"> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">afficherDonnees</span>(<span class="bu">ResultSet</span> resultats) <span class="kw">throws</span> <span class="bu">SQLException</span>{</a>
  277. <a class="sourceLine" id="cb8-10" data-line-number="10"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Parcours des donnees retournees&quot;</span>);</a>
  278. <a class="sourceLine" id="cb8-11" data-line-number="11"> <span class="bu">ResultSetMetaData</span> rsmd = resultats.<span class="fu">getMetaData</span>();</a>
  279. <a class="sourceLine" id="cb8-12" data-line-number="12"> <span class="dt">int</span> nbCols = rsmd.<span class="fu">getColumnCount</span>();</a>
  280. <a class="sourceLine" id="cb8-13" data-line-number="13"> <span class="dt">boolean</span> contientDAutresDonnees = resultats.<span class="fu">next</span>();</a>
  281. <a class="sourceLine" id="cb8-14" data-line-number="14"></a>
  282. <a class="sourceLine" id="cb8-15" data-line-number="15"> <span class="kw">for</span> (<span class="dt">int</span> i = <span class="dv">1</span>; i &lt;= nbCols; i++) {</a>
  283. <a class="sourceLine" id="cb8-16" data-line-number="16"> <span class="kw">if</span>(i &gt; <span class="dv">1</span>) {</a>
  284. <a class="sourceLine" id="cb8-17" data-line-number="17"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">print</span>( <span class="st">&quot; | &quot;</span>);</a>
  285. <a class="sourceLine" id="cb8-18" data-line-number="18"> }</a>
  286. <a class="sourceLine" id="cb8-19" data-line-number="19"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">print</span>(rsmd.<span class="fu">getColumnLabel</span>(i));</a>
  287. <a class="sourceLine" id="cb8-20" data-line-number="20"> }</a>
  288. <a class="sourceLine" id="cb8-21" data-line-number="21"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>();</a>
  289. <a class="sourceLine" id="cb8-22" data-line-number="22"></a>
  290. <a class="sourceLine" id="cb8-23" data-line-number="23"> <span class="kw">while</span> (contientDAutresDonnees) {</a>
  291. <a class="sourceLine" id="cb8-24" data-line-number="24"> <span class="kw">for</span> (<span class="dt">int</span> i = <span class="dv">1</span>; i &lt;= nbCols; i++){</a>
  292. <a class="sourceLine" id="cb8-25" data-line-number="25"> <span class="kw">if</span>(i &gt; <span class="dv">1</span>) {</a>
  293. <a class="sourceLine" id="cb8-26" data-line-number="26"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">print</span>( <span class="st">&quot; | &quot;</span>);</a>
  294. <a class="sourceLine" id="cb8-27" data-line-number="27"> }</a>
  295. <a class="sourceLine" id="cb8-28" data-line-number="28"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">print</span>(resultats.<span class="fu">getString</span>(i));</a>
  296. <a class="sourceLine" id="cb8-29" data-line-number="29"> }</a>
  297. <a class="sourceLine" id="cb8-30" data-line-number="30"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>();</a>
  298. <a class="sourceLine" id="cb8-31" data-line-number="31"> contientDAutresDonnees = resultats.<span class="fu">next</span>();</a>
  299. <a class="sourceLine" id="cb8-32" data-line-number="32"> }</a>
  300. <a class="sourceLine" id="cb8-33" data-line-number="33"></a>
  301. <a class="sourceLine" id="cb8-34" data-line-number="34"> resultats.<span class="fu">close</span>();</a>
  302. <a class="sourceLine" id="cb8-35" data-line-number="35"> }</a>
  303. <a class="sourceLine" id="cb8-36" data-line-number="36"></a>
  304. <a class="sourceLine" id="cb8-37" data-line-number="37"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(java.<span class="fu">lang</span>.<span class="fu">String</span>[] args) {</a>
  305. <a class="sourceLine" id="cb8-38" data-line-number="38"> <span class="kw">try</span> {</a>
  306. <a class="sourceLine" id="cb8-39" data-line-number="39"> ConnectionMySQL.<span class="fu">init</span>();</a>
  307. <a class="sourceLine" id="cb8-40" data-line-number="40"> } <span class="kw">catch</span> (<span class="bu">ClassNotFoundException</span> | <span class="bu">IllegalAccessException</span> | <span class="bu">InstantiationException</span> e) {</a>
  308. <a class="sourceLine" id="cb8-41" data-line-number="41"> <span class="bu">System</span>.<span class="fu">err</span>.<span class="fu">println</span>(<span class="st">&quot;La librairie n&#39;est pas disponible&quot;</span>);</a>
  309. <a class="sourceLine" id="cb8-42" data-line-number="42"> <span class="bu">System</span>.<span class="fu">exit</span>(<span class="dv">5</span>);</a>
  310. <a class="sourceLine" id="cb8-43" data-line-number="43"> }</a>
  311. <a class="sourceLine" id="cb8-44" data-line-number="44"></a>
  312. <a class="sourceLine" id="cb8-45" data-line-number="45"></a>
  313. <a class="sourceLine" id="cb8-46" data-line-number="46"> AfficherTablePersonne atp = <span class="kw">new</span> <span class="fu">AfficherTablePersonne</span>();</a>
  314. <a class="sourceLine" id="cb8-47" data-line-number="47"> ConnectionMySQL connecteur = <span class="kw">new</span> <span class="fu">ConnectionMySQL</span>(<span class="st">&quot;lamp.exemple.cesi&quot;</span>, <span class="st">&quot;demouser&quot;</span>, <span class="st">&quot;MotDePasse&quot;</span>);</a>
  315. <a class="sourceLine" id="cb8-48" data-line-number="48"> <span class="kw">try</span> {</a>
  316. <a class="sourceLine" id="cb8-49" data-line-number="49"> connecteur.<span class="fu">connect</span>();</a>
  317. <a class="sourceLine" id="cb8-50" data-line-number="50"></a>
  318. <a class="sourceLine" id="cb8-51" data-line-number="51"> <span class="bu">ResultSet</span> resultSet = connecteur.<span class="fu">execute</span>(<span class="st">&quot;SELECT * FROM personne&quot;</span>);</a>
  319. <a class="sourceLine" id="cb8-52" data-line-number="52"> atp.<span class="fu">afficherDonnees</span>(resultSet);</a>
  320. <a class="sourceLine" id="cb8-53" data-line-number="53"></a>
  321. <a class="sourceLine" id="cb8-54" data-line-number="54"> <span class="co">//Bonne pratique: fermer votre résultat</span></a>
  322. <a class="sourceLine" id="cb8-55" data-line-number="55"> resultSet.<span class="fu">close</span>();</a>
  323. <a class="sourceLine" id="cb8-56" data-line-number="56"></a>
  324. <a class="sourceLine" id="cb8-57" data-line-number="57"> <span class="co">//Bonne pratique: fermer le connecteur</span></a>
  325. <a class="sourceLine" id="cb8-58" data-line-number="58"> connecteur.<span class="fu">close</span>();</a>
  326. <a class="sourceLine" id="cb8-59" data-line-number="59"> } <span class="kw">catch</span> (<span class="bu">SQLException</span> e) {</a>
  327. <a class="sourceLine" id="cb8-60" data-line-number="60"> e.<span class="fu">printStackTrace</span>();</a>
  328. <a class="sourceLine" id="cb8-61" data-line-number="61"> }</a>
  329. <a class="sourceLine" id="cb8-62" data-line-number="62"> <span class="bu">System</span>.<span class="fu">exit</span>(<span class="dv">0</span>);</a>
  330. <a class="sourceLine" id="cb8-63" data-line-number="63"> }</a>
  331. <a class="sourceLine" id="cb8-64" data-line-number="64">}</a></code></pre></div>
  332. <h2 id="exercice">Exercice</h2>
  333. <p>Créez une classe qui permette de stocker les résultats en lisant un <code>ResultSet</code> et un algorithme qui instancie une Personne pour chaque entrée de la base.</p>
  334. <div class="sourceCode" id="cb9"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb9-1" data-line-number="1"></a>
  335. <a class="sourceLine" id="cb9-2" data-line-number="2"><span class="kw">public</span> <span class="kw">interface</span> Personne{</a>
  336. <a class="sourceLine" id="cb9-3" data-line-number="3"> <span class="co">//...</span></a>
  337. <a class="sourceLine" id="cb9-4" data-line-number="4"> <span class="kw">public</span> <span class="bu">String</span> <span class="fu">getNom</span>();</a>
  338. <a class="sourceLine" id="cb9-5" data-line-number="5"> <span class="kw">public</span> <span class="bu">String</span> <span class="fu">getPrenom</span>();</a>
  339. <a class="sourceLine" id="cb9-6" data-line-number="6"></a>
  340. <a class="sourceLine" id="cb9-7" data-line-number="7"> <span class="kw">public</span> <span class="bu">Date</span> <span class="fu">getDateNaissance</span>();</a>
  341. <a class="sourceLine" id="cb9-8" data-line-number="8">}</a></code></pre></div>
  342. <h2 id="ecrire-dans-les-bases-de-données">Ecrire dans les bases de données</h2>
  343. <p>La classe suivante montre comment écrire dans une base de données:</p>
  344. <div class="sourceCode" id="cb10"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb10-1" data-line-number="1"><span class="kw">package</span><span class="im"> fr.greta.dwm2.database.lecture;</span></a>
  345. <a class="sourceLine" id="cb10-2" data-line-number="2"></a>
  346. <a class="sourceLine" id="cb10-3" data-line-number="3"><span class="kw">import</span><span class="im"> java.sql.SQLException;</span></a>
  347. <a class="sourceLine" id="cb10-4" data-line-number="4"><span class="kw">import</span><span class="im"> java.sql.Statement;</span></a>
  348. <a class="sourceLine" id="cb10-5" data-line-number="5"><span class="kw">import</span><span class="im"> java.text.SimpleDateFormat;</span></a>
  349. <a class="sourceLine" id="cb10-6" data-line-number="6"><span class="kw">import</span><span class="im"> java.util.InputMismatchException;</span></a>
  350. <a class="sourceLine" id="cb10-7" data-line-number="7"><span class="kw">import</span><span class="im"> java.util.List;</span></a>
  351. <a class="sourceLine" id="cb10-8" data-line-number="8"><span class="kw">import</span><span class="im"> java.util.Scanner;</span></a>
  352. <a class="sourceLine" id="cb10-9" data-line-number="9"></a>
  353. <a class="sourceLine" id="cb10-10" data-line-number="10"><span class="kw">import</span><span class="im"> fr.greta.dwm2.database.ConnectionMySQL;</span></a>
  354. <a class="sourceLine" id="cb10-11" data-line-number="11"><span class="kw">import</span><span class="im"> fr.greta.dwm2.database.DateSimple;</span></a>
  355. <a class="sourceLine" id="cb10-12" data-line-number="12"><span class="kw">import</span><span class="im"> fr.greta.dwm2.database.Personne;</span></a>
  356. <a class="sourceLine" id="cb10-13" data-line-number="13"><span class="kw">import</span><span class="im"> fr.greta.dwm2.util.GestionMenu;</span></a>
  357. <a class="sourceLine" id="cb10-14" data-line-number="14"></a>
  358. <a class="sourceLine" id="cb10-15" data-line-number="15"><span class="kw">public</span> <span class="kw">class</span> Ecriture {</a>
  359. <a class="sourceLine" id="cb10-16" data-line-number="16"> <span class="co">//INSERT INTO `personne`(`nom`, `prenom`, `dnaissance`) VALUES (&#39;RABHI&#39;,&#39;Pierre&#39;,&#39;1938-05-29&#39;)</span></a>
  360. <a class="sourceLine" id="cb10-17" data-line-number="17"></a>
  361. <a class="sourceLine" id="cb10-18" data-line-number="18"> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">remplir</span>(ConnectionMySQL connecteur){</a>
  362. <a class="sourceLine" id="cb10-19" data-line-number="19"> <span class="co">//Nécessaire pour faire les insertions</span></a>
  363. <a class="sourceLine" id="cb10-20" data-line-number="20"> <span class="bu">Statement</span> stmt = <span class="kw">null</span>;</a>
  364. <a class="sourceLine" id="cb10-21" data-line-number="21"> <span class="kw">try</span> {</a>
  365. <a class="sourceLine" id="cb10-22" data-line-number="22"> connecteur.<span class="fu">connect</span>();</a>
  366. <a class="sourceLine" id="cb10-23" data-line-number="23"> stmt = connecteur.<span class="fu">getConnection</span>().<span class="fu">createStatement</span>();</a>
  367. <a class="sourceLine" id="cb10-24" data-line-number="24"> <span class="dt">boolean</span> continuer = <span class="kw">true</span>;</a>
  368. <a class="sourceLine" id="cb10-25" data-line-number="25"> <span class="kw">while</span>(continuer){</a>
  369. <a class="sourceLine" id="cb10-26" data-line-number="26"> <span class="bu">String</span> nom = GestionMenu.<span class="fu">getInstance</span>().<span class="fu">getValeur</span>(<span class="st">&quot;Entrez le nom:&quot;</span>);</a>
  370. <a class="sourceLine" id="cb10-27" data-line-number="27"> <span class="bu">String</span> prenom = GestionMenu.<span class="fu">getInstance</span>().<span class="fu">getValeur</span>(<span class="st">&quot;Entrez le prénom:&quot;</span>);</a>
  371. <a class="sourceLine" id="cb10-28" data-line-number="28"> DateSimple ds = <span class="kw">null</span>;</a>
  372. <a class="sourceLine" id="cb10-29" data-line-number="29"> <span class="kw">while</span>(ds == <span class="kw">null</span>){</a>
  373. <a class="sourceLine" id="cb10-30" data-line-number="30"> <span class="bu">String</span> date = GestionMenu.<span class="fu">getInstance</span>().<span class="fu">getValeur</span>(<span class="st">&quot;Entrez une date:&quot;</span>);</a>
  374. <a class="sourceLine" id="cb10-31" data-line-number="31"> ds = DateSimple.<span class="fu">checkDate</span>(date);</a>
  375. <a class="sourceLine" id="cb10-32" data-line-number="32"> }</a>
  376. <a class="sourceLine" id="cb10-33" data-line-number="33"> <span class="fu">inserer</span>(stmt, nom, prenom, ds);</a>
  377. <a class="sourceLine" id="cb10-34" data-line-number="34"> <span class="bu">String</span> doitContinuer = GestionMenu.<span class="fu">getInstance</span>().<span class="fu">getValeur</span>(<span class="st">&quot;Continuer (o/n):&quot;</span>);</a>
  378. <a class="sourceLine" id="cb10-35" data-line-number="35"> continuer = doitContinuer.<span class="fu">equals</span>(<span class="st">&quot;o&quot;</span>);</a>
  379. <a class="sourceLine" id="cb10-36" data-line-number="36"> }</a>
  380. <a class="sourceLine" id="cb10-37" data-line-number="37"> } <span class="kw">catch</span> (<span class="bu">SQLException</span> e) {</a>
  381. <a class="sourceLine" id="cb10-38" data-line-number="38"> e.<span class="fu">printStackTrace</span>();</a>
  382. <a class="sourceLine" id="cb10-39" data-line-number="39"> }</a>
  383. <a class="sourceLine" id="cb10-40" data-line-number="40"> <span class="kw">finally</span>{</a>
  384. <a class="sourceLine" id="cb10-41" data-line-number="41"> <span class="kw">if</span> (stmt != <span class="kw">null</span>) {</a>
  385. <a class="sourceLine" id="cb10-42" data-line-number="42"> <span class="kw">try</span> {</a>
  386. <a class="sourceLine" id="cb10-43" data-line-number="43"> stmt.<span class="fu">close</span>();</a>
  387. <a class="sourceLine" id="cb10-44" data-line-number="44"> } <span class="kw">catch</span> (<span class="bu">SQLException</span> e) {</a>
  388. <a class="sourceLine" id="cb10-45" data-line-number="45"> <span class="bu">System</span>.<span class="fu">err</span>.<span class="fu">println</span>(<span class="st">&quot;Erreur à la sortie&quot;</span>);</a>
  389. <a class="sourceLine" id="cb10-46" data-line-number="46"> e.<span class="fu">printStackTrace</span>();</a>
  390. <a class="sourceLine" id="cb10-47" data-line-number="47"> }</a>
  391. <a class="sourceLine" id="cb10-48" data-line-number="48"> }</a>
  392. <a class="sourceLine" id="cb10-49" data-line-number="49"> }</a>
  393. <a class="sourceLine" id="cb10-50" data-line-number="50"> }</a>
  394. <a class="sourceLine" id="cb10-51" data-line-number="51"></a>
  395. <a class="sourceLine" id="cb10-52" data-line-number="52"></a>
  396. <a class="sourceLine" id="cb10-53" data-line-number="53"> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">changerDate</span>(ConnectionMySQL connecteur){</a>
  397. <a class="sourceLine" id="cb10-54" data-line-number="54"> <span class="co">//Nécessaire pour faire les insertions</span></a>
  398. <a class="sourceLine" id="cb10-55" data-line-number="55"> <span class="bu">Statement</span> stmt = <span class="kw">null</span>;</a>
  399. <a class="sourceLine" id="cb10-56" data-line-number="56"> <span class="kw">try</span> {</a>
  400. <a class="sourceLine" id="cb10-57" data-line-number="57"> connecteur.<span class="fu">connect</span>();</a>
  401. <a class="sourceLine" id="cb10-58" data-line-number="58"> stmt = connecteur.<span class="fu">getConnection</span>().<span class="fu">createStatement</span>();</a>
  402. <a class="sourceLine" id="cb10-59" data-line-number="59"> <span class="dt">boolean</span> continuer = <span class="kw">true</span>;</a>
  403. <a class="sourceLine" id="cb10-60" data-line-number="60"> <span class="kw">while</span>(continuer){</a>
  404. <a class="sourceLine" id="cb10-61" data-line-number="61"> <span class="bu">String</span> nom = GestionMenu.<span class="fu">getInstance</span>().<span class="fu">getValeur</span>(<span class="st">&quot;Entrez le nom:&quot;</span>);</a>
  405. <a class="sourceLine" id="cb10-62" data-line-number="62"> <span class="bu">String</span> prenom = GestionMenu.<span class="fu">getInstance</span>().<span class="fu">getValeur</span>(<span class="st">&quot;Entrez le prénom:&quot;</span>);</a>
  406. <a class="sourceLine" id="cb10-63" data-line-number="63"> DateSimple ds = <span class="kw">null</span>;</a>
  407. <a class="sourceLine" id="cb10-64" data-line-number="64"> <span class="kw">while</span>(ds == <span class="kw">null</span>){</a>
  408. <a class="sourceLine" id="cb10-65" data-line-number="65"> <span class="bu">String</span> date = GestionMenu.<span class="fu">getInstance</span>().<span class="fu">getValeur</span>(<span class="st">&quot;Entrez une date:&quot;</span>);</a>
  409. <a class="sourceLine" id="cb10-66" data-line-number="66"> ds = DateSimple.<span class="fu">checkDate</span>(date);</a>
  410. <a class="sourceLine" id="cb10-67" data-line-number="67"> }</a>
  411. <a class="sourceLine" id="cb10-68" data-line-number="68"> <span class="fu">inserer</span>(stmt, nom, prenom, ds);</a>
  412. <a class="sourceLine" id="cb10-69" data-line-number="69"> <span class="bu">String</span> doitContinuer = GestionMenu.<span class="fu">getInstance</span>().<span class="fu">getValeur</span>(<span class="st">&quot;Continuer (o/n):&quot;</span>);</a>
  413. <a class="sourceLine" id="cb10-70" data-line-number="70"> continuer = doitContinuer.<span class="fu">equals</span>(<span class="st">&quot;o&quot;</span>);</a>
  414. <a class="sourceLine" id="cb10-71" data-line-number="71"> }</a>
  415. <a class="sourceLine" id="cb10-72" data-line-number="72"> } <span class="kw">catch</span> (<span class="bu">SQLException</span> e) {</a>
  416. <a class="sourceLine" id="cb10-73" data-line-number="73"> e.<span class="fu">printStackTrace</span>();</a>
  417. <a class="sourceLine" id="cb10-74" data-line-number="74"> }</a>
  418. <a class="sourceLine" id="cb10-75" data-line-number="75"> <span class="kw">finally</span>{</a>
  419. <a class="sourceLine" id="cb10-76" data-line-number="76"> <span class="kw">if</span> (stmt != <span class="kw">null</span>) {</a>
  420. <a class="sourceLine" id="cb10-77" data-line-number="77"> <span class="kw">try</span> {</a>
  421. <a class="sourceLine" id="cb10-78" data-line-number="78"> stmt.<span class="fu">close</span>();</a>
  422. <a class="sourceLine" id="cb10-79" data-line-number="79"> } <span class="kw">catch</span> (<span class="bu">SQLException</span> e) {</a>
  423. <a class="sourceLine" id="cb10-80" data-line-number="80"> <span class="bu">System</span>.<span class="fu">err</span>.<span class="fu">println</span>(<span class="st">&quot;Erreur à la sortie&quot;</span>);</a>
  424. <a class="sourceLine" id="cb10-81" data-line-number="81"> e.<span class="fu">printStackTrace</span>();</a>
  425. <a class="sourceLine" id="cb10-82" data-line-number="82"> }</a>
  426. <a class="sourceLine" id="cb10-83" data-line-number="83"> }</a>
  427. <a class="sourceLine" id="cb10-84" data-line-number="84"> }</a>
  428. <a class="sourceLine" id="cb10-85" data-line-number="85"> }</a>
  429. <a class="sourceLine" id="cb10-86" data-line-number="86"></a>
  430. <a class="sourceLine" id="cb10-87" data-line-number="87"> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">inserer</span>(<span class="bu">Statement</span> stmt,</a>
  431. <a class="sourceLine" id="cb10-88" data-line-number="88"> <span class="bu">String</span> nom, <span class="bu">String</span> prenom, DateSimple date) <span class="kw">throws</span> <span class="bu">SQLException</span>{</a>
  432. <a class="sourceLine" id="cb10-89" data-line-number="89"> stmt.<span class="fu">executeUpdate</span>(</a>
  433. <a class="sourceLine" id="cb10-90" data-line-number="90"> <span class="st">&quot;insert into personne &quot;</span> +</a>
  434. <a class="sourceLine" id="cb10-91" data-line-number="91"> <span class="st">&quot;values(&#39;&quot;</span>+nom+<span class="st">&quot;&#39;, &#39;&quot;</span>+prenom+<span class="st">&quot;&#39;, &#39;&quot;</span>+date.<span class="fu">getSqlRepresentation</span>()+<span class="st">&quot;&#39;)&quot;</span>);</a>
  435. <a class="sourceLine" id="cb10-92" data-line-number="92"> }</a>
  436. <a class="sourceLine" id="cb10-93" data-line-number="93"></a>
  437. <a class="sourceLine" id="cb10-94" data-line-number="94"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {</a>
  438. <a class="sourceLine" id="cb10-95" data-line-number="95"> <span class="kw">try</span> {</a>
  439. <a class="sourceLine" id="cb10-96" data-line-number="96"> ConnectionMySQL.<span class="fu">init</span>();</a>
  440. <a class="sourceLine" id="cb10-97" data-line-number="97"> } <span class="kw">catch</span> (<span class="bu">ClassNotFoundException</span> | <span class="bu">IllegalAccessException</span> | <span class="bu">InstantiationException</span> e) {</a>
  441. <a class="sourceLine" id="cb10-98" data-line-number="98"> <span class="bu">System</span>.<span class="fu">err</span>.<span class="fu">println</span>(<span class="st">&quot;La librairie n&#39;est pas disponible&quot;</span>);</a>
  442. <a class="sourceLine" id="cb10-99" data-line-number="99"> <span class="bu">System</span>.<span class="fu">exit</span>(<span class="dv">5</span>);</a>
  443. <a class="sourceLine" id="cb10-100" data-line-number="100"> }</a>
  444. <a class="sourceLine" id="cb10-101" data-line-number="101"></a>
  445. <a class="sourceLine" id="cb10-102" data-line-number="102"></a>
  446. <a class="sourceLine" id="cb10-103" data-line-number="103"> <span class="co">//On peut continuer ici:</span></a>
  447. <a class="sourceLine" id="cb10-104" data-line-number="104"> ConnectionMySQL connecteur = <span class="kw">new</span> <span class="fu">ConnectionMySQL</span>(<span class="st">&quot;lamp.exemple.cesi&quot;</span>, <span class="st">&quot;demouser&quot;</span>, <span class="st">&quot;MotDePasse&quot;</span>);</a>
  448. <a class="sourceLine" id="cb10-105" data-line-number="105"> Ecriture ins = <span class="kw">new</span> <span class="fu">Ecriture</span>();</a>
  449. <a class="sourceLine" id="cb10-106" data-line-number="106"> ins.<span class="fu">remplir</span>(connecteur);</a>
  450. <a class="sourceLine" id="cb10-107" data-line-number="107"></a>
  451. <a class="sourceLine" id="cb10-108" data-line-number="108"> }</a>
  452. <a class="sourceLine" id="cb10-109" data-line-number="109">}</a></code></pre></div>
  453. <p>Le code source des classes qu’elle utilise est disponible <a href="exemples/database">ici</a> :</p>
  454. <ul>
  455. <li><a href="exemples/database/fr/greta/dwm2/util/GestionMenu.java">GestionMenu.java</a></li>
  456. <li><a href="exemples/database/fr/greta/dwm2/database/DateSimple.java">DateSimple.java</a></li>
  457. </ul>
  458. <p>Voir aussi cette page : <a href="http://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html">Retrieving and Modifying Values from Result Sets</a></p>
  459. <h2 id="pour-aller-plus-loin">Pour aller plus loin</h2>
  460. <p>Des exemples complets sur l’ensemble des fonctionnalités JDBC <a href="http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html">sont disponibles ici</a>.</p>
  461. </body>
  462. </html>