-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path03_java_jdbc_P_IntroductionJDBC.ipynb.backup
More file actions
121 lines (121 loc) · 4.5 KB
/
Copy path03_java_jdbc_P_IntroductionJDBC.ipynb.backup
File metadata and controls
121 lines (121 loc) · 4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{
"cells": [
{
"cell_type": "markdown",
"id": "5de7f200-a9a6-4ae9-b096-e4ee769fd20b",
"metadata": {},
"source": [
"---\n",
" title: \"TP JDBC\"\n",
" provide_notes: true\n",
" provide_slides: false\n",
" jupyter: java-lts\n",
" echo: true\n",
" output: true\n",
" categories: \n",
" - Java\n",
" - I111\n",
" - Exercices\n",
" - JDBC\n",
"---\n",
"Ce TP peut être fait en utilisant en particulier postgresql (installé en salle de TP) ou la base de données h2 (http://www.h2database.com/html/cheatSheet.html) que vous ferez fonctionner en serveur.\n",
"\n",
"Il est aussi possible d’utiliser très simplement un serveur mysql (ou postgresql) avec Docker :\n",
"\n",
"```bash\n",
"docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=ArraujUrb4 -d mysql\n",
"```\n",
"\n",
"## Utilisation simple de JDBC\n",
"\n",
" * Avec le script journal.sql.tgz créer les tables qui représentent des journaux.\n",
" * Créer une classe que se connecte à votre base de donnée. Pensez à mettre en place correctement les librairies nécessaires. Pour le moment, la connexion sera représentée par une variable d’instance.\n",
" * Ajouter une méthode qui affiche la liste des journaux en utilisant un Statment\n",
" * Créer une méthode ajouterJournal(…) qui permet d’insérer un journal dans la base de données\n",
" * En utilisant un PreparedStamement, lire un code de Journal au clavier et afficher les informations correspondantes tant que l’on ne rentre pas 0.\n",
"\n",
"## Utilisation des métadonnées\n",
"\n",
" * Ajouter une méthode qui affiche les métadonnées correspondant à la base de données\n",
" * Ajouter une méthode qui afficher les métadonnées correspondant à la requête select * from journal\n",
"\n",
"## Batch Update\n",
"\n",
" * Utiliser les batch update pour ajouter des journaux en lisant un fichier texte formaté\n",
" `(code_j:titre:prix:type:periode::adr_j)`.\n",
"\n",
"```java\n",
"// Création d'un requete\n",
"PreparedStatemen pstmt = \n",
" conn.prepareStatement(\"INSERT INTO EMPLOYE (email, nom, prenom) VALUES(?, ?, ?)\");\n",
" \n",
"//On ajoute les exécution une à une ...\n",
"conn.setAutoCommit(false);\n",
" \n",
"// On fixe les paramètres de la première requête à exécuter\n",
"pstmt.setString( 1, \"...@...\");\n",
"pstmt.setString( 2, \"...\" );\n",
"pstmt.setString( 3, \"...\" );\n",
"// Et on l'ajoute au batch\n",
"pstmt.addBatch();\n",
" \n",
"// On fixe les paramètres de la seconde requête à exécuter\n",
"pstmt.setString( 1, \"...@...\");\n",
"pstmt.setString( 2, \"...\" );\n",
"pstmt.setString( 3, \"...\" );\n",
"// Et on l'ajoute au batch\n",
"pstmt.addBatch();\n",
" \n",
"// On ajoute autant de requêtes que nécessaire\n",
"//Par exemple en lisant un flux de données.\n",
".\n",
".\n",
".\n",
".\n",
"//On créée un tableau d'entiers pour recevoir les résultats.\n",
"//et on execute toutes les mises à jour en une fois.\n",
"int[] count = stmt.executeBatch();\n",
" \n",
"//On valide les changements.\n",
"conn.commit();\n",
"```\n",
"\n",
"## Utilisation d'un pool de connexion\n",
"\n",
"Mettez en place un pool de connections avec Apache Commons DBCP : https://www.baeldung.com/java-connection-pooling\n",
"\n",
"## DAO Générique\n",
"\n",
" * Créer une interface générique paramétrée par le type qui sera celui de votre entité (Personne, Chien, …) cette interface proposera par exemple les methodes : T find(long id), List<T> findAll(), persist(T), update(T), remove(T). Vous pourrez ensuite améliorer cette interface.\n",
" * Créer une classe d’entité Personne, une classe DAOPersonne qui implante DAO<Personne>.\n",
" * Ajouter des méthodes spécifiques à la DAO.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "f5b1b6d1-fef4-4802-93ef-7ee67464af48",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Java",
"language": "java",
"name": "java"
},
"language_info": {
"codemirror_mode": "java",
"file_extension": ".jshell",
"mimetype": "text/x-java-source",
"name": "java",
"pygments_lexer": "java",
"version": "21.0.2+13-LTS"
}
},
"nbformat": 4,
"nbformat_minor": 5
}