1 00:00:00,050 --> 00:00:03,009 Bueno, pues a lo que íbamos. 2 00:00:04,389 --> 00:00:07,889 Esto es una pequeña contestabilización solamente para que tengáis de dónde tirar 3 00:00:07,889 --> 00:00:10,289 y porque haréis la aplicación desde cero vosotros, claro. 4 00:00:12,570 --> 00:00:15,410 Todos sabéis lo que es una base de datos relacional, lógicamente. 5 00:00:16,730 --> 00:00:20,329 Es una base de datos en la que la información está estructurada en tablas, 6 00:00:20,390 --> 00:00:22,550 donde las tablas son colecciones de registros. 7 00:00:22,789 --> 00:00:26,769 Y ya está, cada registro es, a su vez, un conjunto de campos, 8 00:00:26,769 --> 00:00:28,170 donde cada campo es un dato 9 00:00:28,170 --> 00:00:31,050 de ese registro 10 00:00:31,050 --> 00:00:31,809 que representa 11 00:00:31,809 --> 00:00:33,850 un objeto en realidad 12 00:00:33,850 --> 00:00:35,210 es lo que representa un registro 13 00:00:35,210 --> 00:00:38,369 y la tabla que representa en realidad 14 00:00:38,369 --> 00:00:39,049 una clase 15 00:00:39,049 --> 00:00:41,750 cuando nosotros trabajamos 16 00:00:41,750 --> 00:00:44,310 con la clase coche 17 00:00:44,310 --> 00:00:46,250 y luego tenemos un montón de objetos 18 00:00:46,250 --> 00:00:47,829 coche, el SEAT, el Renault 19 00:00:47,829 --> 00:00:50,710 pues lo que tenéis es una tabla 20 00:00:50,710 --> 00:00:53,270 coche en la que hay un montón de registros 21 00:00:53,270 --> 00:00:55,049 el SEAT, el Renault, el no sé cuántos 22 00:00:55,049 --> 00:00:55,850 y no sé qué, ¿verdad? 23 00:00:55,890 --> 00:00:57,130 ¿Para dar la coche a la isla a propósito? 24 00:00:57,429 --> 00:00:59,229 Sí, porque me parece que es la... 25 00:00:59,229 --> 00:01:02,070 Sí, pues estaba en la mesa y ya estaba en la mesa. 26 00:01:02,070 --> 00:01:03,630 Bueno, pues entonces, 27 00:01:04,109 --> 00:01:05,629 eso es una base de datos relacional. 28 00:01:10,069 --> 00:01:12,189 ¿Vale? Así está estructurada 29 00:01:12,189 --> 00:01:12,629 y ya está. 30 00:01:14,189 --> 00:01:14,629 Entonces, 31 00:01:15,370 --> 00:01:17,390 ¿cómo estructurar los datos solamente así? 32 00:01:17,469 --> 00:01:19,650 Se queda muy pobre, pues por eso se meten claves. 33 00:01:19,930 --> 00:01:21,430 ¿Vale? Claves primarias 34 00:01:21,430 --> 00:01:22,989 que identifican de forma única 35 00:01:22,989 --> 00:01:26,170 a cada registro, así la información es más manejable 36 00:01:26,170 --> 00:01:29,129 y tiene una estructura un poquito más real 37 00:01:29,129 --> 00:01:32,129 y luego como la información siempre está relacionada 38 00:01:32,129 --> 00:01:34,909 un coche siempre pertenece a 39 00:01:34,909 --> 00:01:38,250 una marca, la marca a su vez 40 00:01:38,250 --> 00:01:40,730 puede pertenecer a un proveedor, lo que sea, pues por eso 41 00:01:40,730 --> 00:01:44,310 desde cada registro podemos decir, oye y este registro 42 00:01:44,310 --> 00:01:47,510 además tiene una información añadida que no la pongo 43 00:01:47,510 --> 00:01:50,409 aquí porque es que me iría hasta el infinito con este 44 00:01:50,409 --> 00:01:56,650 registro, no la pongo aquí, sino que salta aquí. Salta aquí, la añadida la tienes 45 00:01:56,650 --> 00:02:00,689 aquí. Pues esto es lo que habéis estudiado y luego habéis hecho un lenguaje de consultas 46 00:02:00,689 --> 00:02:07,010 para obtener la información que hay aquí, modificarla, etcétera, etcétera. Vale, pero 47 00:02:07,010 --> 00:02:13,270 normalmente el SQL no se utiliza directamente desde un cliente de SQL en el que no hace 48 00:02:13,270 --> 00:02:16,849 las consultas, un humano, porque entonces ese humano, pues ya con todos esos resultados, 49 00:02:16,849 --> 00:02:19,330 tendría que manualmente 50 00:02:19,330 --> 00:02:21,430 volcarlos a la aplicación 51 00:02:21,430 --> 00:02:22,430 que fuera, etcétera 52 00:02:22,430 --> 00:02:25,090 tiene sentido, lo natural es que la base de datos 53 00:02:25,090 --> 00:02:27,289 acceda a una aplicación 54 00:02:27,289 --> 00:02:29,229 nuestra aplicación de gestión, la que sea 55 00:02:29,229 --> 00:02:38,030 pues esta pequeña 56 00:02:38,030 --> 00:02:39,949 aplicación de gestión que hayáis vosotros 57 00:02:39,949 --> 00:02:42,210 accederá, modificará 58 00:02:42,210 --> 00:02:43,969 consultará lo que vosotros 59 00:02:43,969 --> 00:02:44,810 decidáis 60 00:02:44,810 --> 00:02:47,770 de esta base de datos que vosotros habéis 61 00:02:47,770 --> 00:02:49,689 decidido, ¿vale? con dos, tres tablas 62 00:02:49,689 --> 00:02:51,810 como mucho, relacionadas con claves 63 00:02:51,810 --> 00:02:57,750 ajenas a ser posible, bueno, a ser posible y aunque no sea posible, ¿vale? Bueno, pues 64 00:02:57,750 --> 00:03:02,389 entonces, la aplicación de gestión, ¿qué es? Pues una aplicación exactamente igual 65 00:03:02,389 --> 00:03:08,150 que la que hemos hecho, una aplicación normalucha y corrientucha que tiene que, como todas las 66 00:03:08,150 --> 00:03:14,530 aplicaciones, pues tendrá su modelo de datos con sus clases. ¿Qué va a ocurrir aquí 67 00:03:14,530 --> 00:03:21,189 en particular? Pues que va a resultar, si esta aplicación está diseñada, va a resultar 68 00:03:21,189 --> 00:03:22,569 que cada clase 69 00:03:22,569 --> 00:03:25,530 cada clase 70 00:03:25,530 --> 00:03:28,969 va a resultar 71 00:03:28,969 --> 00:03:30,669 que tiene una tabla 72 00:03:30,669 --> 00:03:33,550 equivalente 73 00:03:33,550 --> 00:03:35,830 tiene sentido 74 00:03:35,830 --> 00:03:37,830 si esta aplicación gestiona 75 00:03:37,830 --> 00:03:40,189 coches, que otras cosas 76 00:03:40,189 --> 00:03:41,110 habíamos hablado hace un rato 77 00:03:41,110 --> 00:03:43,509 marcas 78 00:03:43,509 --> 00:03:45,770 marco 79 00:03:45,770 --> 00:03:47,150 que es la que une marcas con coches 80 00:03:47,150 --> 00:03:49,789 bueno, concesionarios, por ejemplo 81 00:03:49,789 --> 00:03:51,110 pues entonces 82 00:03:51,110 --> 00:03:54,710 la aplicación que gestiona esto 83 00:03:54,710 --> 00:03:56,169 tendrá una clase coches 84 00:03:56,169 --> 00:03:57,569 donde las propiedades 85 00:03:57,569 --> 00:03:59,949 serán los campos del coche 86 00:03:59,949 --> 00:04:01,770 tendrá una clase 87 00:04:01,770 --> 00:04:02,830 marca 88 00:04:02,830 --> 00:04:07,710 donde cada propiedad 89 00:04:07,710 --> 00:04:10,250 será cada uno de los campos de esa tabla 90 00:04:10,250 --> 00:04:10,650 ¿verdad? 91 00:04:10,650 --> 00:04:11,569 pero no 92 00:04:11,569 --> 00:04:14,110 en Java no tiene sentido que exista la tabla Marco 93 00:04:14,110 --> 00:04:19,610 la relación de muchos a muchos 94 00:04:19,610 --> 00:04:24,449 O sea, que decís una tabla que está hecha para hacer una relación de muchos a muchos, ¿no? 95 00:04:24,829 --> 00:04:27,310 No, es de 1 a 1 96 00:04:27,310 --> 00:04:31,370 O de 1 a 1, vale, de muchos a muchos o de 1 a 1 97 00:04:31,370 --> 00:04:35,170 No, ahí no, porque la información se va a representar de otra manera 98 00:04:35,170 --> 00:04:39,310 Ahora mismo vamos a imaginar, ahora mismo solamente, el escenario de que las claves 99 00:04:39,310 --> 00:04:43,949 Sí, que las claves son de 1 a muchos 100 00:04:43,949 --> 00:04:46,430 Vamos a poner el escenario de 1 a muchos ahora mismo 101 00:04:46,430 --> 00:04:49,649 Un coche pertenece a una marca 102 00:04:49,649 --> 00:04:51,050 Pero una marca 103 00:04:51,050 --> 00:04:52,529 Tiene muchos coches 104 00:04:52,529 --> 00:04:54,430 Entonces esta sería de uno a muchos 105 00:04:54,430 --> 00:04:56,889 Justo 106 00:04:56,889 --> 00:04:58,589 Aquí también sería de uno a muchos 107 00:04:58,589 --> 00:05:01,029 Porque un concesionario tiene muchos coches 108 00:05:01,029 --> 00:05:02,189 No sé cómo será vuestra tabla 109 00:05:02,189 --> 00:05:03,970 Pero imagino que será así 110 00:05:03,970 --> 00:05:06,490 Y un coche pertenece a un solo concesionario 111 00:05:06,490 --> 00:05:07,050 Suponemos 112 00:05:07,050 --> 00:05:08,550 Bueno pues entonces 113 00:05:08,550 --> 00:05:10,870 Esto 114 00:05:10,870 --> 00:05:12,709 Una vez que tengáis 115 00:05:12,709 --> 00:05:15,189 Vuestras tablas decididas 116 00:05:15,189 --> 00:05:16,629 porque lo primero 117 00:05:16,629 --> 00:05:19,269 que uno modela cuando hace una aplicación 118 00:05:19,269 --> 00:05:20,089 es esto 119 00:05:20,089 --> 00:05:23,189 eso es lo primero, los datos 120 00:05:23,189 --> 00:05:25,410 que estará normalmente en una base de datos 121 00:05:25,410 --> 00:05:27,290 relacional, si está en una base de datos de otro tipo 122 00:05:27,290 --> 00:05:29,050 pues lo modela como sea esta base de datos 123 00:05:29,050 --> 00:05:31,449 pero esto es lo primero, el punto de partida 124 00:05:31,449 --> 00:05:33,009 es esto, mis datos son estos 125 00:05:33,009 --> 00:05:34,790 ¿dónde van a estar guardados? 126 00:05:34,850 --> 00:05:36,569 una base de datos, esta base de datos 127 00:05:36,569 --> 00:05:38,870 ¿cuál es su mejor diseño? 128 00:05:39,069 --> 00:05:40,949 para guardar esta información de forma 129 00:05:40,949 --> 00:05:43,230 consistente, coherente, manejable 130 00:05:43,230 --> 00:05:45,810 escalable, de forma que si yo incorporo 131 00:05:45,810 --> 00:05:47,550 un dato nuevo, no tenga que hacer 132 00:05:47,550 --> 00:05:49,290 aquí una remodelación de todas las tablas 133 00:05:49,290 --> 00:05:52,009 entonces lo primero es hacer un buen diseño 134 00:05:52,009 --> 00:05:53,490 de la base de datos 135 00:05:53,490 --> 00:05:55,889 y cuando ya esa base de datos 136 00:05:55,889 --> 00:05:57,610 está, uno ya va 137 00:05:57,610 --> 00:05:59,529 a la aplicación, la aplicación es la segundona 138 00:05:59,529 --> 00:06:01,449 si no hay datos, la aplicación no 139 00:06:01,449 --> 00:06:03,069 existe y tiene ningún sentido 140 00:06:03,069 --> 00:06:05,209 bueno, pues en este caso, como he hecho una relación 141 00:06:05,209 --> 00:06:06,470 de muchos a uno 142 00:06:06,470 --> 00:06:09,689 aquí como lo ponéis, un coche 143 00:06:09,689 --> 00:06:11,589 tiene una sola marca, lo ponéis así 144 00:06:11,589 --> 00:06:12,029 o al revés 145 00:06:12,029 --> 00:06:14,389 y un 146 00:06:14,389 --> 00:06:17,670 y esto también así, ¿no? 147 00:06:18,069 --> 00:06:20,189 Un coche, un concesionario 148 00:06:20,189 --> 00:06:21,009 que tiene muchos coches. 149 00:06:21,470 --> 00:06:23,870 Pues entonces, en una situación como esta, por ejemplo, 150 00:06:24,430 --> 00:06:25,069 ¿lo he puesto al revés? 151 00:06:25,589 --> 00:06:26,949 No, creo que es el elemento. 152 00:06:27,449 --> 00:06:29,290 Porque un coche puede estar en más de un concesionario. 153 00:06:29,350 --> 00:06:31,350 Ah, bueno, vale, pero vamos a nosotros, ahora mismo, 154 00:06:31,449 --> 00:06:33,410 como estamos con el ejemplo de uno a muchos, 155 00:06:34,069 --> 00:06:35,769 vamos a suponer que un coche está en un concesionario 156 00:06:35,769 --> 00:06:37,050 solamente, en uno solo. 157 00:06:37,569 --> 00:06:39,670 Bueno, pues vosotros una vez que tenéis elegida 158 00:06:39,670 --> 00:06:40,829 vuestra base de datos, 159 00:06:40,829 --> 00:06:44,269 ahora ya hacéis el diseño de la aplicación 160 00:06:44,269 --> 00:06:45,889 y claro, el diseño de la aplicación 161 00:06:45,889 --> 00:06:48,009 siempre parte de primero 162 00:06:48,009 --> 00:06:49,370 las clases, como siempre 163 00:06:49,370 --> 00:06:52,089 lo que pasa es que ahora, en lugar de hacer las clases 164 00:06:52,089 --> 00:06:53,689 como las hacíamos nosotros, que era pensando 165 00:06:53,689 --> 00:06:55,790 directamente en la realidad 166 00:06:55,790 --> 00:06:57,829 y en representarla, pues ahora 167 00:06:57,829 --> 00:06:59,769 es que lo tenemos más fácil, porque ahora nuestras 168 00:06:59,769 --> 00:07:01,670 clases van a mapear, tienen que mapear 169 00:07:01,670 --> 00:07:03,370 directamente estas tablas 170 00:07:03,370 --> 00:07:05,889 entonces eso, se puede 171 00:07:05,889 --> 00:07:06,470 hacer a mano 172 00:07:06,470 --> 00:07:09,829 o en función del framework 173 00:07:09,829 --> 00:07:11,790 de acceso a base de datos que se utilice 174 00:07:11,790 --> 00:07:13,790 que nosotros ahora en este trabajo no vamos a utilizar 175 00:07:13,790 --> 00:07:14,790 lógicamente, pues 176 00:07:14,790 --> 00:07:17,750 se te lo cuenta derecho 177 00:07:17,750 --> 00:07:20,790 se te monta automáticamente 178 00:07:20,790 --> 00:07:22,269 no, no, no 179 00:07:22,269 --> 00:07:23,930 bueno, sí, se te puede 180 00:07:23,930 --> 00:07:25,569 incluso montar si tú haces, bueno 181 00:07:25,569 --> 00:07:27,970 digamos que todo esto es muy complejo 182 00:07:27,970 --> 00:07:29,029 pero que se te 183 00:07:29,029 --> 00:07:31,930 tú puedes 184 00:07:31,930 --> 00:07:33,410 porque es verdad, tú puedes saber 185 00:07:33,410 --> 00:07:35,589 tú puedes tener un escenario en el cual 186 00:07:35,589 --> 00:07:37,990 tú has pensado primero tu modelo de clases 187 00:07:37,990 --> 00:07:40,370 y luego dices, y ahora quiero una base de datos 188 00:07:40,370 --> 00:07:41,790 que encaje con este modelo de clases 189 00:07:41,790 --> 00:07:44,230 también lo puedes generar automáticamente 190 00:07:44,230 --> 00:07:45,810 no tienes que... 191 00:07:45,810 --> 00:07:48,250 todo esto es muy interesante 192 00:07:48,250 --> 00:07:50,350 claro, pero cuando hablo de generar automática 193 00:07:50,350 --> 00:07:51,610 y todo eso, siempre está 194 00:07:51,610 --> 00:07:53,569 el humano por encima 195 00:07:53,569 --> 00:07:56,449 que tiene que verificar que todo eso 196 00:07:56,449 --> 00:07:57,089 tiene algún sentido 197 00:07:57,089 --> 00:08:00,370 porque claro, las cosas que generan 198 00:08:00,370 --> 00:08:02,389 los frameworks, luego hay que irlas cogiendo 199 00:08:02,389 --> 00:08:04,430 un poquito con pinzas, luego estará el humano 200 00:08:04,430 --> 00:08:06,649 por encima, o dentro de 4 o 5 años 201 00:08:06,649 --> 00:08:08,230 el robocito 202 00:08:08,230 --> 00:08:11,649 que lo haga mientras vosotros estáis en el sofá 203 00:08:11,649 --> 00:08:13,449 esperemos que en lugar 204 00:08:13,449 --> 00:08:15,750 de en paro, controlando el robocito 205 00:08:15,750 --> 00:08:16,949 esperemos 206 00:08:16,949 --> 00:08:19,069 eso dependerá de vosotros 207 00:08:19,069 --> 00:08:21,689 de lo que os hayáis 208 00:08:21,689 --> 00:08:22,709 adaptado al sistema 209 00:08:22,709 --> 00:08:24,790 bueno, pues entonces 210 00:08:24,790 --> 00:08:27,550 sí, de lo que el sistema 211 00:08:27,550 --> 00:08:29,470 haya permitido que nos adaptemos 212 00:08:29,470 --> 00:08:31,910 pero bueno, vuestra parte tenéis que interhacerla 213 00:08:31,910 --> 00:08:33,710 esperemos que sea suficiente 214 00:08:33,710 --> 00:08:35,590 vale, bueno, pues entonces en nuestro caso 215 00:08:35,590 --> 00:08:37,450 hora en particular, la base de datos 216 00:08:37,450 --> 00:08:39,350 es lo primero que haréis. Y ahora ya tenéis que 217 00:08:39,350 --> 00:08:40,970 hacer las clases. Bueno, pues en este caso 218 00:08:40,970 --> 00:08:43,149 habrá una clase coche. 219 00:08:43,809 --> 00:08:45,590 La clase coche pues tendrá 220 00:08:45,590 --> 00:08:47,350 todas las propiedades 221 00:08:48,029 --> 00:08:50,690 que tiene 222 00:08:50,690 --> 00:08:53,570 cada registro de coche. Tantas propiedades 223 00:08:53,570 --> 00:08:55,110 como campos. Pero ¿qué ocurrirá? 224 00:08:55,590 --> 00:08:57,490 Que uno de esos campos 225 00:08:57,490 --> 00:08:59,490 resulta que es una clave 226 00:08:59,490 --> 00:09:01,330 ajena. Entonces, ¿eso qué 227 00:09:01,330 --> 00:09:03,450 significa? Que el coche 228 00:09:03,450 --> 00:09:05,250 tiene una marca asociada 229 00:09:05,250 --> 00:09:09,269 que tiene un montón de información. Luego esta propiedad en realidad 230 00:09:09,269 --> 00:09:13,309 es una propiedad objeto, porque 231 00:09:13,309 --> 00:09:17,269 a su vez tiene dentro un montón de información. Luego cada vez que 232 00:09:17,269 --> 00:09:21,389 hay una clave ajena, la propiedad correspondiente dentro de la clase 233 00:09:21,389 --> 00:09:25,250 coche será a su vez un objeto. Es decir, tendrá 234 00:09:25,250 --> 00:09:28,889 las propiedades primitivas normales de aquí y luego tendrá 235 00:09:28,889 --> 00:09:30,909 una propiedad marca. 236 00:09:30,909 --> 00:09:36,269 y esta propiedad es la que representa 237 00:09:36,269 --> 00:09:39,409 el hecho de que aquí hay un campo 238 00:09:39,409 --> 00:09:42,129 que me conduce a un registro entero 239 00:09:42,129 --> 00:09:44,330 con un montón de propiedades 240 00:09:44,330 --> 00:09:49,029 y lo mismo pasará con concesionarios 241 00:09:49,029 --> 00:09:51,330 habrá otra clave ajena por aquí 242 00:09:51,330 --> 00:09:53,769 que lleve a concesionarios 243 00:09:53,769 --> 00:09:57,970 entonces eso significará que el coche tiene dentro 244 00:09:57,970 --> 00:10:00,730 algo que tiene un montón de información 245 00:10:00,730 --> 00:10:02,490 luego tiene dentro un objeto 246 00:10:02,490 --> 00:10:04,169 luego significará esto 247 00:10:04,169 --> 00:10:08,149 vale, pues con estas 248 00:10:08,149 --> 00:10:10,129 directrices, lo otro ya podéis hacer 249 00:10:10,129 --> 00:10:11,610 diseñar vuestras clases 250 00:10:11,610 --> 00:10:14,649 luego ya vendrá el problema 251 00:10:14,649 --> 00:10:16,070 el siguiente problema 252 00:10:16,070 --> 00:10:18,429 que es, vale, pero cuando yo hago, cuando vos hacéis una consulta 253 00:10:18,429 --> 00:10:18,870 de SQL 254 00:10:18,870 --> 00:10:21,389 vosotros sacáis directamente 255 00:10:21,389 --> 00:10:24,090 aunque hagáis un inner join 256 00:10:24,090 --> 00:10:25,970 hagáis una multita, hagáis lo que sea 257 00:10:25,970 --> 00:10:27,470 lo que saquéis es una colección de campos 258 00:10:27,470 --> 00:10:30,330 ¿qué va a tocar hacer 259 00:10:30,330 --> 00:10:31,409 luego por código? 260 00:10:31,409 --> 00:10:33,649 pues de esa colección de campos 261 00:10:33,649 --> 00:10:35,509 que habéis obtenido con el SQL 262 00:10:35,509 --> 00:10:37,649 separarlos, los que sean 263 00:10:37,649 --> 00:10:39,409 de marca, construir un objeto 264 00:10:39,409 --> 00:10:41,350 con ellos e instanciarlo 265 00:10:41,350 --> 00:10:42,769 para meterlo a la propiedad de coche 266 00:10:42,769 --> 00:10:44,950 los que sean de concesionario 267 00:10:44,950 --> 00:10:47,049 extraerlos 268 00:10:47,049 --> 00:10:49,850 e instanciar con ellos un objeto concesionario 269 00:10:49,850 --> 00:10:51,250 para meterlo a la propiedad de coche 270 00:10:51,250 --> 00:10:53,830 el resto de campos ya los metéis aquí 271 00:10:53,830 --> 00:10:55,710 con eso ya se puede instanciar un coche, etc. 272 00:10:56,429 --> 00:10:57,389 entonces todo eso es 273 00:10:57,389 --> 00:11:00,090 trabajoso, porque tú tienes 274 00:11:00,090 --> 00:11:01,970 simplemente unos datos ahí que has sacado 275 00:11:01,970 --> 00:11:02,929 una consulta, un montón 276 00:11:02,929 --> 00:11:06,029 y con ellos tienes que ir instanciando objetos 277 00:11:06,029 --> 00:11:07,889 para reproducir ya tu objeto 278 00:11:07,889 --> 00:11:09,190 coche, ¿vale? 279 00:11:09,450 --> 00:11:11,549 Y todo esto ya casi lo hice a principio de curso 280 00:11:11,549 --> 00:11:13,490 cuando estaba haciendo el videojuego 281 00:11:13,490 --> 00:11:15,549 y todo este tipo de cosas 282 00:11:15,549 --> 00:11:17,690 lo que no hice es la base de datos como tal, pero me la hice a mano 283 00:11:17,690 --> 00:11:19,309 Pues más fácil 284 00:11:19,309 --> 00:11:21,909 Vale, pues entonces así es como se trabaja 285 00:11:21,909 --> 00:11:23,870 Entonces esto, si uno lo hace 286 00:11:23,870 --> 00:11:25,929 a mano, que es como nosotros lo vamos a hacer ahora 287 00:11:25,929 --> 00:11:27,850 tiene el máximo control 288 00:11:27,850 --> 00:11:29,789 de la aplicación, entonces esa va a ser nuestra forma 289 00:11:29,789 --> 00:11:31,570 a hacerlo ahora, que es con la capa base 290 00:11:31,570 --> 00:11:33,210 que es la que se llama JDBC 291 00:11:33,210 --> 00:11:35,629 de la que ahora vemos rápidamente 292 00:11:35,629 --> 00:11:37,490 las directrices para que busquéis a través de ella 293 00:11:37,490 --> 00:11:39,009 y ya está, JDBC, vale 294 00:11:39,009 --> 00:11:41,649 pero claro, si uno tuviera que hacer una aplicación enorme 295 00:11:41,649 --> 00:11:43,710 gigante, siempre así a mano 296 00:11:43,710 --> 00:11:44,649 con JDBC 297 00:11:44,649 --> 00:11:47,149 pues perdería una cantidad de tiempo 298 00:11:47,149 --> 00:11:49,950 entonces por eso es por lo que se van poniendo capas adicionales por encima 299 00:11:49,950 --> 00:11:52,110 es decir, frameworks o clases 300 00:11:52,110 --> 00:11:53,750 que uno importa 301 00:11:53,750 --> 00:11:56,350 que te esconden esta complejidad 302 00:11:56,350 --> 00:11:58,409 tú configuras 303 00:11:58,409 --> 00:12:00,730 ciertas cosas de ellas, configuras 304 00:12:00,730 --> 00:12:02,529 que no es sencillo configurarlas 305 00:12:02,529 --> 00:12:04,669 y luego le dices, oye, sácame un coche 306 00:12:04,669 --> 00:12:05,450 de la base de datos 307 00:12:05,450 --> 00:12:08,210 y esa herramienta que tú has configurado 308 00:12:08,210 --> 00:12:10,230 es la que te hace el SQL 309 00:12:10,230 --> 00:12:12,549 tú ni ves SQL ni nada, el SQL no lo ves jamás 310 00:12:12,549 --> 00:12:14,370 sácame un coche 311 00:12:14,370 --> 00:12:16,970 entonces, esa herramienta 312 00:12:16,970 --> 00:12:18,470 por dentro te hace 313 00:12:18,470 --> 00:12:20,409 el SQL, te saca 314 00:12:20,409 --> 00:12:22,590 todo lo que haga falta, te construye 315 00:12:22,590 --> 00:12:24,269 los objetos, te los instancia 316 00:12:24,269 --> 00:12:26,169 y te da el objeto coche ya hecho, tú le dices 317 00:12:26,169 --> 00:12:28,350 oye, herramienta, dame un coche 318 00:12:28,350 --> 00:12:29,590 con el ID tal 319 00:12:29,590 --> 00:12:31,710 y te da el coche, que tiene dentro la marca 320 00:12:31,710 --> 00:12:32,950 tiene dentro todo 321 00:12:32,950 --> 00:12:35,710 pero primero, configurarla 322 00:12:35,710 --> 00:12:37,570 para que realmente entienda 323 00:12:37,570 --> 00:12:39,690 donde está cada parte 324 00:12:39,690 --> 00:12:41,649 del coche, no es fácil 325 00:12:41,649 --> 00:12:42,429 hay que hacerlo bien 326 00:12:42,429 --> 00:12:45,190 y segundo, pierdes un poco el control 327 00:12:45,190 --> 00:12:47,769 porque si tú haces el SQL directamente 328 00:12:47,769 --> 00:12:49,570 a lo mejor consigues 329 00:12:49,570 --> 00:12:51,090 una aplicación de mejor rendimiento 330 00:12:51,090 --> 00:12:53,169 porque la base tradicional es 331 00:12:53,169 --> 00:12:55,629 estructurar la información de manera muy 332 00:12:55,629 --> 00:12:56,990 gráfica y todo muy bonito 333 00:12:56,990 --> 00:12:59,169 pero estas son pesadísimas 334 00:12:59,169 --> 00:13:01,769 un sistema gestor de base de datos 335 00:13:01,769 --> 00:13:02,850 es súper pesado 336 00:13:02,850 --> 00:13:05,149 muchas veces es el cuello de botella de una aplicación 337 00:13:05,149 --> 00:13:07,370 eso, el sistema gestor de bases de datos 338 00:13:07,370 --> 00:13:09,169 por eso es por lo que se han incorporado 339 00:13:09,169 --> 00:13:11,990 bases de datos no relacionales 340 00:13:11,990 --> 00:13:12,649 al mercado 341 00:13:12,649 --> 00:13:15,250 para intentar que dejen de ser el cuello de botella 342 00:13:15,250 --> 00:13:16,149 de las aplicaciones 343 00:13:16,149 --> 00:13:18,750 pero claro, como esto está tan desarrollado 344 00:13:18,750 --> 00:13:20,210 está ya tan currado, tan trabajado 345 00:13:20,210 --> 00:13:22,190 pues siguen siendo todavía 346 00:13:22,190 --> 00:13:24,289 normalmente 347 00:13:24,289 --> 00:13:25,830 las que se usan en la mayoría de aplicaciones 348 00:13:25,830 --> 00:13:29,429 pero son muy pesadas 349 00:13:29,429 --> 00:13:31,309 aunque sean los que más se usan 350 00:13:31,309 --> 00:13:32,570 son muy pesadas 351 00:13:32,570 --> 00:13:34,909 entonces, ¿qué es lo que estaba diciendo? 352 00:13:35,049 --> 00:13:37,389 que usar esa herramienta, ese framework que digo 353 00:13:37,389 --> 00:13:39,730 aparte de la dificultad de configurarlo 354 00:13:39,730 --> 00:13:41,210 pierdes el control de la aplicación 355 00:13:41,210 --> 00:13:43,590 porque ella hace el SQL que Dios le da a entender 356 00:13:43,590 --> 00:13:45,049 tú no controlas como lo está haciendo 357 00:13:45,049 --> 00:13:47,730 y no digo puede ralentizar 358 00:13:47,730 --> 00:13:49,029 no, ralentizan 359 00:13:49,029 --> 00:13:51,070 ralentizan una barbaridad la aplicación 360 00:13:51,070 --> 00:13:53,230 pero bueno, una aplicación comercial normal 361 00:13:53,230 --> 00:13:54,269 pues hombre 362 00:13:54,269 --> 00:13:55,710 tampoco 363 00:13:55,710 --> 00:13:58,490 eso tiene por qué ser un problema 364 00:13:58,490 --> 00:14:00,649 entre esperar un milisegundo 365 00:14:00,649 --> 00:14:02,330 a que te den la respuesta de tu venta 366 00:14:02,330 --> 00:14:03,870 y esperar un milisegundo y medio 367 00:14:03,870 --> 00:14:05,970 pues bueno, tampoco es crítico 368 00:14:05,970 --> 00:14:06,190 ¿vale? 369 00:14:06,970 --> 00:14:11,909 depende del contexto 370 00:14:11,909 --> 00:14:13,730 si es una aplicación pequeña, pues sí 371 00:14:13,730 --> 00:14:16,110 ¿vale? por ejemplo, vosotros no os acordaréis 372 00:14:16,110 --> 00:14:18,049 pero el chico que vino aquí 373 00:14:18,049 --> 00:14:20,009 a principio de curso y os contó un montón 374 00:14:20,009 --> 00:14:22,110 de cosas de lo que hacía, en algún momento mencionó 375 00:14:22,110 --> 00:14:24,230 y dijo, en esta parte de la aplicación 376 00:14:24,230 --> 00:14:26,049 estoy haciendo directamente 377 00:14:26,049 --> 00:14:27,870 JDBC, pues se refería a esto 378 00:14:27,870 --> 00:14:30,629 que estaba haciendo directamente desde la aplicación 379 00:14:30,629 --> 00:14:32,490 las consultas SQL, la reconstrucción 380 00:14:32,490 --> 00:14:33,809 de los objetos y todo eso 381 00:14:33,809 --> 00:14:36,029 pero no es lo habitual 382 00:14:36,029 --> 00:14:37,970 lo habitual es que una aplicación grande 383 00:14:37,970 --> 00:14:39,809 se haga con otra capa por encima 384 00:14:39,809 --> 00:14:41,710 que es esa herramienta que os digo 385 00:14:41,710 --> 00:14:44,190 que es en Java 386 00:14:44,190 --> 00:14:45,830 y en muchos otros lenguajes 387 00:14:45,830 --> 00:14:48,629 es esta, es la que se usa prácticamente siempre 388 00:14:48,629 --> 00:14:51,129 por si os suena de nombre 389 00:14:51,129 --> 00:14:53,889 y luego normalmente encima de esta capa 390 00:14:53,889 --> 00:15:06,309 Como esta es tan pesada de configurar, pues desde hace ya bastante tiempo se le ha puesto otra capa por encima, que es la capa que se llama Sprint. 391 00:15:07,070 --> 00:15:20,230 Sprint es una bolsa enorme donde cabe de todo, una bolsa enorme que vale para todo, pero parte de para lo que vale es para ponerse por encima de Ibernate en teoría para facilitarnos las cosas. 392 00:15:20,230 --> 00:15:23,230 pero de nuevo sprint es relativamente 393 00:15:23,230 --> 00:15:25,129 complicado de configurar, conclusión 394 00:15:25,129 --> 00:15:27,490 uno puede llegar a una situación en la cual 395 00:15:27,490 --> 00:15:29,409 hacer un simple select 396 00:15:29,409 --> 00:15:30,509 para sacar un coche 397 00:15:30,509 --> 00:15:32,110 que en JDBC 398 00:15:32,110 --> 00:15:34,830 son cuatro líneas de código 399 00:15:34,830 --> 00:15:37,330 pues se puede 400 00:15:37,330 --> 00:15:39,269 si tú le pones toda la arquitectura 401 00:15:39,269 --> 00:15:41,309 de JDBC que es hacerlo a mano 402 00:15:41,309 --> 00:15:43,590 por encima de esto, por encima de esto 403 00:15:43,590 --> 00:15:44,509 le pones toda la arquitectura 404 00:15:44,509 --> 00:15:47,350 tienes una aplicación de mil 405 00:15:47,350 --> 00:15:48,190 dos mil clases 406 00:15:48,190 --> 00:15:50,490 que están ocultando 407 00:15:50,490 --> 00:15:52,190 en realidad un único select 408 00:15:52,190 --> 00:15:53,450 es lo único que están ocultando 409 00:15:53,450 --> 00:15:55,769 entonces claro, si la aplicación te hace un select 410 00:15:55,769 --> 00:15:57,230 pues no pones todas estas capas 411 00:15:57,230 --> 00:16:00,230 pero si la aplicación es una aplicación de gestión 412 00:16:00,230 --> 00:16:02,149 que te hace un montón de cosas con la base de datos 413 00:16:02,149 --> 00:16:04,830 y encima tu intención es que vaya escalando 414 00:16:04,830 --> 00:16:06,750 y cada vez haga más cosas 415 00:16:06,750 --> 00:16:08,289 pues entonces sí que montas 416 00:16:08,289 --> 00:16:09,590 esta arquitectura desde el principio 417 00:16:09,590 --> 00:16:12,090 porque sí que te va a facilitar el incorporar 418 00:16:12,090 --> 00:16:13,850 nuevas funcionalidades y todo eso 419 00:16:13,850 --> 00:16:15,830 porque una vez que la tienes configurada 420 00:16:15,830 --> 00:16:18,909 ya está, el meterle funcionalidades nuevas es inmediato 421 00:16:18,909 --> 00:16:20,610 el problema es la configuración de partida 422 00:16:20,610 --> 00:16:22,090 y tener toda la arquitectura que te funcione 423 00:16:22,090 --> 00:16:23,470 y ahí 424 00:16:23,470 --> 00:16:26,570 ahora mismo, chat GPT no es de mucha ayuda 425 00:16:26,570 --> 00:16:29,009 ¿vale? porque chat GPT 426 00:16:29,009 --> 00:16:30,450 pues bueno, no 427 00:16:30,450 --> 00:16:32,370 casa las versiones 428 00:16:32,370 --> 00:16:34,570 porque aquí sobre todo es, si pongo esta versión 429 00:16:34,570 --> 00:16:35,710 esta no funciona, tengo que buscar otra 430 00:16:35,710 --> 00:16:38,149 entonces chat GPT es de ayuda 431 00:16:38,149 --> 00:16:40,710 para saber por dónde van ciertos tiros 432 00:16:40,710 --> 00:16:42,450 pero en estas cosas no es de mucha ayuda 433 00:16:42,450 --> 00:16:44,269 ¿vale? entonces 434 00:16:44,269 --> 00:16:45,970 no vamos a montar la arquitectura 435 00:16:45,970 --> 00:16:48,429 nosotros ahora, la montaremos el año que viene 436 00:16:48,429 --> 00:16:50,049 simplemente en vuestro 437 00:16:50,049 --> 00:16:52,210 trabajito de ahora vais a hacer 438 00:16:52,210 --> 00:16:53,929 esto que os he dicho a mano 439 00:16:53,929 --> 00:16:55,470 y hacerlo a mano 440 00:16:55,470 --> 00:16:58,110 significa hacerlo con esto 441 00:16:58,110 --> 00:16:59,190 de aquí, ¿vale? 442 00:16:59,710 --> 00:17:01,909 entonces palabra clave de la que tenéis que tirar 443 00:17:01,909 --> 00:17:03,789 para hacer vuestro trabajito 444 00:17:03,789 --> 00:17:05,450 bueno, está claro hacer la base de datos 445 00:17:05,450 --> 00:17:07,890 la aplicación Java con el modelo de datos 446 00:17:07,890 --> 00:17:08,950 pues 447 00:17:08,950 --> 00:17:12,069 ya sabéis las directrices para hacerlas 448 00:17:12,069 --> 00:17:13,069 si hay claves ajenas 449 00:17:13,069 --> 00:17:15,069 bueno 450 00:17:15,069 --> 00:17:17,450 las directrices apenas hemos dado 451 00:17:17,450 --> 00:17:19,490 porque hemos dado en la clase coche 452 00:17:19,490 --> 00:17:21,910 pero que pasaría en la clase 453 00:17:21,910 --> 00:17:23,029 marcas por ejemplo 454 00:17:23,029 --> 00:17:25,890 la clase marca 455 00:17:25,890 --> 00:17:27,170 que está en el extremo 1 456 00:17:27,170 --> 00:17:30,029 la clase marca pues tendría 457 00:17:30,029 --> 00:17:32,509 todas las propiedades 458 00:17:32,509 --> 00:17:33,750 de aquí y ya está 459 00:17:33,750 --> 00:17:35,250 y no tiene más todas sus propiedades 460 00:17:35,250 --> 00:17:37,250 pero que le pasa a marcas 461 00:17:37,250 --> 00:17:39,210 que como tiene una clave ajena 462 00:17:39,210 --> 00:17:41,250 marcas en realidad 463 00:17:41,250 --> 00:17:43,130 tiene un montón de coches dentro 464 00:17:43,130 --> 00:17:45,369 aquí esa información no está 465 00:17:45,369 --> 00:17:47,490 aquí solamente están las propiedades de la marca 466 00:17:47,490 --> 00:17:49,329 pero nosotros sabemos 467 00:17:49,329 --> 00:17:51,549 porque tenemos la visión de toda la base de datos 468 00:17:51,549 --> 00:17:53,809 nosotros sabemos que hay un montón 469 00:17:53,809 --> 00:17:55,930 de coches, un montón que están tirando 470 00:17:55,930 --> 00:17:57,390 de ella, hay un montón 471 00:17:57,390 --> 00:18:00,029 entonces, ¿eso cómo se debería reflejar 472 00:18:00,029 --> 00:18:00,950 en la base de datos? 473 00:18:02,210 --> 00:18:03,750 pues como una colección 474 00:18:03,750 --> 00:18:05,750 efectivamente, como una colección 475 00:18:05,750 --> 00:18:06,730 de coches 476 00:18:06,730 --> 00:18:14,259 Entonces, cuando hay una clave ajena 477 00:18:14,259 --> 00:18:15,980 Si en coche 478 00:18:15,980 --> 00:18:17,420 Hay un objeto marca 479 00:18:17,420 --> 00:18:21,039 Y es una clave de uno a muchos 480 00:18:21,039 --> 00:18:23,079 En marca habrá una colección de coches 481 00:18:23,079 --> 00:18:24,579 En una clave de uno a muchos 482 00:18:24,579 --> 00:18:25,339 ¿Vale? 483 00:18:28,390 --> 00:18:30,930 Otra cosa es que nos interese rellenarlos 484 00:18:30,930 --> 00:18:32,890 A lo mejor queremos 485 00:18:32,890 --> 00:18:36,069 Obtenme los datos de la marca 486 00:18:36,069 --> 00:18:37,390 Pero no nos interesan los coches 487 00:18:37,390 --> 00:18:39,589 Pues hacemos simplemente el select 488 00:18:39,589 --> 00:18:42,390 de los datos y rellenamos los campos de arriba 489 00:18:42,390 --> 00:18:44,450 y este no le rellenamos 490 00:18:44,450 --> 00:18:45,930 no tenemos por qué 491 00:18:45,930 --> 00:18:47,089 porque para rellenar este 492 00:18:47,089 --> 00:18:49,809 hay que seguir anidándosele aquí 493 00:18:49,809 --> 00:18:52,089 hacer las subconsultas que sean 494 00:18:52,089 --> 00:18:53,789 para sacar todos los coches 495 00:18:53,789 --> 00:18:55,710 que llevan a la marca 496 00:18:55,710 --> 00:18:57,150 de la que yo estoy haciendo sele 497 00:18:57,150 --> 00:18:58,410 de irlo rellenando aquí 498 00:18:58,410 --> 00:19:00,769 entonces por ejemplo 499 00:19:00,769 --> 00:19:02,609 las herramientas esas que os digo 500 00:19:02,609 --> 00:19:05,029 si yo le digo sacame una marca 501 00:19:05,029 --> 00:19:07,730 solo te hacen las subconsultas 502 00:19:07,730 --> 00:19:09,329 de la tabla de la que tira 503 00:19:09,329 --> 00:19:11,549 para además rellenar los coches 504 00:19:11,549 --> 00:19:13,089 si ven 505 00:19:13,089 --> 00:19:14,990 que tú vas a usar ese dato 506 00:19:14,990 --> 00:19:17,089 si no vas a usar ese dato 507 00:19:17,089 --> 00:19:19,049 porque solamente vas a usar estos de arriba 508 00:19:19,049 --> 00:19:20,230 esta no la rellena 509 00:19:20,230 --> 00:19:22,710 solo la rellena si tú lo vas a usar 510 00:19:22,710 --> 00:19:25,369 entonces, esos son los tipos de cosas que hay que configurar 511 00:19:25,369 --> 00:19:26,509 etcétera 512 00:19:26,509 --> 00:19:29,230 entonces, aunque el modelo de datos real 513 00:19:29,230 --> 00:19:30,029 sea este 514 00:19:30,029 --> 00:19:32,890 luego cuando vosotros hagáis las funcionalidades 515 00:19:32,890 --> 00:19:34,349 de recupera 516 00:19:34,349 --> 00:19:37,450 la marca que tiene más coches 517 00:19:37,450 --> 00:19:38,529 ahí sí que 518 00:19:38,529 --> 00:19:41,690 os rellenaríais esto, porque luego haríais el máximo 519 00:19:41,690 --> 00:19:42,910 de la que tiene 520 00:19:42,910 --> 00:19:44,650 la lista esta más larga 521 00:19:44,650 --> 00:19:47,369 o recupérame las marcas para enseñarme 522 00:19:47,369 --> 00:19:49,170 cuáles son, pues ahí no 523 00:19:49,170 --> 00:19:51,609 os recuperaríais esto, porque esta información no interesa 524 00:19:51,609 --> 00:19:52,630 y es un rollo 525 00:19:52,630 --> 00:19:55,690 ¿vale? haríais el select de los datos 526 00:19:55,690 --> 00:19:56,849 los pondríais aquí y ya está 527 00:19:56,849 --> 00:19:59,410 y nos recorreríais las marcas y se acabó, este link no os hace 528 00:19:59,410 --> 00:20:00,069 falta para nada 529 00:20:00,069 --> 00:20:02,390 lo único que digo es que 530 00:20:02,390 --> 00:20:04,930 que existan aquí estas propiedades 531 00:20:04,930 --> 00:20:07,529 representa esta clave 532 00:20:07,529 --> 00:20:13,349 ajenas, lo que la representa. Y lo que decías tú, cuando hay una clave de uno a uno o de 533 00:20:13,349 --> 00:20:18,569 muchos a muchos. Una clave de uno a uno o de muchos a muchos se hace con una tabla adicional. 534 00:20:19,470 --> 00:20:26,109 Y esa tabla, efectivamente, no es una entidad propia. Por ejemplo, esta, imaginaos que esta 535 00:20:26,109 --> 00:20:34,170 la cambiamos de muchos a muchos. Entonces, ahora ya necesitamos otra tabla, coche, concesionario, 536 00:20:34,170 --> 00:20:34,789 lo que sea 537 00:20:34,789 --> 00:20:38,339 necesitamos otra tabla 538 00:20:38,339 --> 00:20:40,599 que representa 539 00:20:40,599 --> 00:20:43,140 que un coche puede pertenecer a muchos 540 00:20:43,140 --> 00:20:45,720 concesionarios y que un concesionario 541 00:20:45,720 --> 00:20:47,039 puede tener muchos coches 542 00:20:47,039 --> 00:20:47,619 o algo así 543 00:20:47,619 --> 00:20:52,549 ¿vale? 544 00:20:54,509 --> 00:20:55,190 entonces 545 00:20:55,190 --> 00:20:57,089 ese hecho 546 00:20:57,089 --> 00:20:59,549 de que un coche 547 00:20:59,549 --> 00:21:00,869 puede tener muchos concesionarios y al revés 548 00:21:00,869 --> 00:21:04,630 ese hecho 549 00:21:04,630 --> 00:21:07,529 en las clases es mucho más fácil 550 00:21:07,529 --> 00:21:09,869 no tenemos que hacer efectivamente 551 00:21:09,869 --> 00:21:11,710 una clase para esta 552 00:21:11,710 --> 00:21:12,509 no hay que hacerlo 553 00:21:12,509 --> 00:21:15,950 simplemente eso como se representa 554 00:21:15,950 --> 00:21:17,769 pues 555 00:21:17,769 --> 00:21:21,529 si este es el concesionario 556 00:21:21,529 --> 00:21:24,549 claro, se pone una lista en ambos 557 00:21:24,549 --> 00:21:26,630 y este es el coche 558 00:21:26,630 --> 00:21:28,609 pues este tendrá 559 00:21:28,609 --> 00:21:30,950 una lista de concesionarios 560 00:21:30,950 --> 00:21:32,369 y este tendrá 561 00:21:32,369 --> 00:21:33,890 una lista de coches 562 00:21:33,890 --> 00:21:36,190 ah, porque eso es de muchos a muchos 563 00:21:36,190 --> 00:21:37,710 Claro, porque es de muchos a muchos. 564 00:21:38,109 --> 00:21:39,069 ¿Qué es de uno a uno? 565 00:21:39,430 --> 00:21:41,230 Un objeto aquí y un objeto aquí. 566 00:21:41,549 --> 00:21:42,109 Y ya está. 567 00:21:42,990 --> 00:21:43,849 Y se acabó. 568 00:21:44,349 --> 00:21:48,009 Más los guetes y los setes, tu stream, lo que haga falta. 569 00:21:48,549 --> 00:21:52,170 Entonces, hacer las clases que representan eso es fácil. 570 00:21:53,250 --> 00:21:53,470 ¿Vale? 571 00:21:55,950 --> 00:21:58,829 Luego ya, uno ya hace las funcionalidades que le toca hacer. 572 00:21:59,529 --> 00:22:00,750 Que las que seleccionéis. 573 00:22:01,569 --> 00:22:04,289 Pues, mostrar la película que más se ha visto. 574 00:22:04,289 --> 00:22:07,109 las tres, cuatro 575 00:22:07,109 --> 00:22:09,029 digamos tres, cuatro funcionalidades 576 00:22:09,029 --> 00:22:10,430 de centillas, ¿vale? 577 00:22:10,750 --> 00:22:12,269 si haces 20.000, pues 20.000 578 00:22:12,269 --> 00:22:14,049 ¿eh? 579 00:22:16,250 --> 00:22:17,650 pues desarrollalas 580 00:22:17,650 --> 00:22:19,009 así no te aburres 581 00:22:19,009 --> 00:22:20,269 en casa 582 00:22:20,269 --> 00:22:22,329 y no juegas tanto a videojuegos 583 00:22:22,329 --> 00:22:23,269 ¿no? ¿te puedes hacer esto? 584 00:22:24,710 --> 00:22:25,329 ¿qué tiene malo? 585 00:22:26,150 --> 00:22:27,910 bueno, nada, pero todo el rato 586 00:22:27,910 --> 00:22:29,509 o sea, hacer algo todo el rato 587 00:22:29,509 --> 00:22:31,750 si tiene algo de malo 588 00:22:31,750 --> 00:22:33,549 menos 2000, eso es estupendo 589 00:22:33,549 --> 00:22:38,029 Vale, entonces vosotros ahora ya 590 00:22:38,029 --> 00:22:40,730 Seleccionáis las funcionalidades que queráis hacer 591 00:22:40,730 --> 00:22:41,569 ¿Vale? 592 00:22:41,869 --> 00:22:43,769 Y esas funcionalidades 593 00:22:43,769 --> 00:22:46,990 Pues por ejemplo, las podéis recoger 594 00:22:46,990 --> 00:22:49,170 En una clase 595 00:22:49,170 --> 00:22:51,410 En los métodos correspondientes 596 00:22:51,410 --> 00:22:53,390 Para que luego ya 597 00:22:53,390 --> 00:22:54,930 Vuestra interfaz gráfica 598 00:22:54,930 --> 00:22:56,349 Los llame cuando le hagan falta 599 00:22:56,349 --> 00:22:58,529 Entonces podéis hacer una clase 600 00:22:58,529 --> 00:23:00,990 Pues de como la queráis llamar 601 00:23:00,990 --> 00:23:02,470 Tienen un 602 00:23:02,470 --> 00:23:11,609 Estas clases tienen un nombre específico, pero bueno, dentro de una arquitectura más completa, que ya veremos el año que viene, ahora mismo la podéis llamar como queráis, funcionalidades o como sea. 603 00:23:13,910 --> 00:23:21,849 Y ahora, esta clase, pues tendrá los métodos, vamos a ponerlos, por ejemplo, estáticos, para que se llenen fácilmente. 604 00:23:22,670 --> 00:23:28,150 Y aquí lo que seleccionéis, pues por ejemplo aquí, consultar concesionario con más coches. 605 00:23:28,150 --> 00:23:30,809 entonces, este método 606 00:23:30,809 --> 00:23:32,450 el concesionario con más coches 607 00:23:32,450 --> 00:23:34,470 tendría como valor de retorno 608 00:23:34,470 --> 00:23:36,089 un objeto concesionario 609 00:23:36,089 --> 00:23:39,569 el nombre que fuera 610 00:23:39,569 --> 00:23:42,190 y este en particular no tendría datos 611 00:23:42,190 --> 00:23:44,369 de entrada, este método 612 00:23:44,369 --> 00:23:46,470 se devolvería al concesionario con más coches 613 00:23:46,470 --> 00:23:46,950 lo que sea 614 00:23:46,950 --> 00:23:50,450 por ejemplo, recuperar 615 00:23:50,450 --> 00:23:52,390 los datos de un coche, pues ese método 616 00:23:52,390 --> 00:23:55,009 se le pasaría la clave primaria 617 00:23:55,009 --> 00:23:56,809 lo que hayáis seleccionado para el coche 618 00:23:56,809 --> 00:23:57,990 y te devuelve un objeto coche 619 00:23:57,990 --> 00:24:00,890 con todos sus datos rellenos 620 00:24:00,890 --> 00:24:02,809 pues lo que vosotros seleccionéis 621 00:24:02,809 --> 00:24:06,509 mostrar el concesionario 622 00:24:06,509 --> 00:24:08,849 los concesionarios en los que puedo comprar un coche 623 00:24:08,849 --> 00:24:10,930 pues entonces ese método devolvería 624 00:24:10,930 --> 00:24:13,049 una lista 625 00:24:13,049 --> 00:24:14,309 de objetos concesionario 626 00:24:14,309 --> 00:24:15,970 y se le pasaría un ID del coche 627 00:24:15,970 --> 00:24:18,690 entonces eso es, coges el coche 628 00:24:18,690 --> 00:24:20,890 si has mapeado ya la lista 629 00:24:20,890 --> 00:24:22,910 de su propiedad lista, la devuelves 630 00:24:22,910 --> 00:24:24,650 y ya está, lo que seleccionéis 631 00:24:24,650 --> 00:24:25,250 más o menos 632 00:24:25,250 --> 00:24:41,309 ¿Vale? Bueno, pues el asunto es que una vez ya seleccionado las funcionalidades que vais a hacer, ahora ya el código de dentro, ese ya sí que sí, tiene que hacer algo para ejecutar el SQL con la base de datos. 633 00:24:41,430 --> 00:24:50,069 Ahora ya sí que llegamos a, vale, ¿y cómo hago yo una consulta SQL desde Java? Ahora ya sí que sí hay que hacer una consulta SQL desde Java. 634 00:24:51,069 --> 00:25:21,420 Vale, pues estamos ya en el método que sea y este método tiene que entenderse con la base de datos para ejecutar SQL y en el caso de que sea una consulta, recoger los resultados, porque si es un insert, un delete, no hay nada que recoger, pero si es una consulta, pues además tiene que recoger. 635 00:25:21,420 --> 00:25:23,619 ya llegamos al punto en el que hay que ejecutar SQL 636 00:25:23,619 --> 00:25:25,480 vale, pues aquí tenemos 637 00:25:25,480 --> 00:25:26,559 el problema 638 00:25:26,559 --> 00:25:28,819 de que esto es Java 639 00:25:28,819 --> 00:25:31,519 y esto es la base de datos que sea 640 00:25:31,519 --> 00:25:33,279 Oracle 641 00:25:33,279 --> 00:25:34,599 MySQL 642 00:25:34,599 --> 00:25:37,319 SQLite, Postgre, la que sea 643 00:25:37,319 --> 00:25:39,779 ¿vale? podéis seleccionar 644 00:25:39,779 --> 00:25:40,980 la base de datos que queráis 645 00:25:40,980 --> 00:25:43,119 en realidad la forma de trabajar es 646 00:25:43,119 --> 00:25:44,460 igual con todas 647 00:25:44,460 --> 00:25:46,200 ¿y si lo ponemos en la relación? 648 00:25:46,720 --> 00:25:47,619 no, no, no 649 00:25:47,619 --> 00:25:49,259 No, con las relacionales no. 650 00:25:50,460 --> 00:25:50,660 ¿Vale? 651 00:25:52,019 --> 00:25:53,259 Con las relacionales no. 652 00:25:54,000 --> 00:25:56,880 Estamos, nosotros se supone que vamos a hacer el trabajo con las relacionales. 653 00:25:57,019 --> 00:25:57,180 ¿Vale? 654 00:25:57,619 --> 00:25:59,200 Bueno, seleccionéis la que os dé la gana. 655 00:26:00,339 --> 00:26:00,579 ¿Vale? 656 00:26:00,720 --> 00:26:02,339 Entonces, ¿cuál es el problema? 657 00:26:02,480 --> 00:26:03,759 Seleccionéis la que seleccionéis. 658 00:26:04,400 --> 00:26:09,900 Esto habla chino y esto habla japonés, con lo cual no se parece absolutamente nada. 659 00:26:10,720 --> 00:26:11,440 ¿Verdad que no? 660 00:26:11,759 --> 00:26:12,759 ¿A que no se parecen en agua? 661 00:26:12,759 --> 00:26:12,799 A que no se parecen en agua. 662 00:26:13,059 --> 00:26:13,700 ¿Por qué? 663 00:26:13,859 --> 00:26:15,720 Porque en el agua hay calles criminales. 664 00:26:15,720 --> 00:26:19,819 ya, pero un chino y un japonés 665 00:26:19,819 --> 00:26:21,380 no se entienden entre ellos ni de lejos 666 00:26:21,380 --> 00:26:22,240 claro 667 00:26:22,240 --> 00:26:25,819 por ejemplo 668 00:26:25,819 --> 00:26:27,920 como un andaluz y un gallego 669 00:26:27,920 --> 00:26:28,799 tampoco se entienden 670 00:26:28,799 --> 00:26:31,700 pues, entonces, ¿qué necesitamos? 671 00:26:32,559 --> 00:26:33,920 necesitamos un traductor 672 00:26:33,920 --> 00:26:35,640 no hay más remedio 673 00:26:35,640 --> 00:26:37,880 hace falta un traductor 674 00:26:37,880 --> 00:26:39,940 entonces el traductor 675 00:26:39,940 --> 00:26:41,839 tiene que saber Java 676 00:26:41,839 --> 00:26:43,279 y tiene que saber 677 00:26:43,279 --> 00:26:45,720 la arquitectura interna 678 00:26:45,720 --> 00:26:46,920 con la que está desarrollado esto 679 00:26:46,920 --> 00:26:50,099 entonces, ese traductor 680 00:26:50,099 --> 00:26:52,079 ese traductor 681 00:26:52,079 --> 00:26:54,160 son clases de Java 682 00:26:54,160 --> 00:26:55,559 son clases de Java 683 00:26:55,559 --> 00:26:57,420 que son capaces, que están construidas 684 00:26:57,420 --> 00:26:59,880 para saber hablar el idioma Java 685 00:26:59,880 --> 00:27:01,720 y este otro, entonces esas clases de Java 686 00:27:01,720 --> 00:27:03,259 no están en la máquina virtual de Java 687 00:27:03,259 --> 00:27:05,460 pues la máquina virtual de Java no puede tener traductor 688 00:27:05,460 --> 00:27:06,640 en falta de la base de datos del mundo 689 00:27:06,640 --> 00:27:09,500 la máquina virtual de Java no tiene nada de eso 690 00:27:09,500 --> 00:27:10,619 entonces 691 00:27:10,619 --> 00:27:24,819 Entonces, para la base de datos que uno haya seleccionado, sea la que sea, tiene que buscar las clases y esas clases estarán como siempre en un punto HAB, tiene que buscar las clases que son capaces de hacer la traducción. 692 00:27:25,920 --> 00:27:39,309 Esas clases se llaman el driver, para más en datos, el driver JDBC, porque esto que estamos nosotros hablando ahora, entra dentro de la arquitectura JDBC, que es Java Database Connectivity. 693 00:27:39,309 --> 00:27:47,410 conectividad pues hay que buscar el driver jdbc el driver jdbc que es 694 00:27:49,630 --> 00:27:54,849 un jar que tiene las clases que son capaces de hacer la traducción bueno pues entonces 695 00:27:54,849 --> 00:28:01,869 como incorporamos nosotros clases nuevas a nuestra aplicación pues lo hemos hecho a veces con él 696 00:28:01,869 --> 00:28:04,509 build path claspada 697 00:28:04,509 --> 00:28:05,690 de external hard etc 698 00:28:05,690 --> 00:28:08,730 estas son las cosas que tienes que refrescar o mirar 699 00:28:08,730 --> 00:28:10,769 o preguntarle a alguien 700 00:28:10,769 --> 00:28:12,309 que lo sepa 701 00:28:12,309 --> 00:28:15,109 por ejemplo 702 00:28:15,109 --> 00:28:15,849 o quien sea 703 00:28:15,849 --> 00:28:18,390 bueno pues una vez que esas clases 704 00:28:18,390 --> 00:28:20,430 están ya incorporadas al 705 00:28:20,430 --> 00:28:22,589 claspad de la aplicación porque las habéis 706 00:28:22,589 --> 00:28:24,569 agregado con ad external hard etc 707 00:28:24,569 --> 00:28:26,710 que esas las forman 708 00:28:26,710 --> 00:28:27,369 chapuzas 709 00:28:27,369 --> 00:28:30,990 la forma buena es con maven con un gestor de dependencia 710 00:28:30,990 --> 00:28:32,329 pero esa la dejamos para el año que viene 711 00:28:32,329 --> 00:28:33,609 vamos a quedarnos con la chapuza 712 00:28:33,609 --> 00:28:36,670 que es incorporar el hard directamente 713 00:28:36,670 --> 00:28:38,150 ¿por qué digo que chapuza? 714 00:28:38,650 --> 00:28:40,910 porque tú llevas tu aplicación a tu ordenador 715 00:28:40,910 --> 00:28:43,190 y la has cagado 716 00:28:43,190 --> 00:28:44,430 porque no tira 717 00:28:44,430 --> 00:28:47,470 o te llevas el hard a la misma ubicación 718 00:28:47,470 --> 00:28:48,589 a ese nuevo ordenador 719 00:28:48,589 --> 00:28:51,049 o esa aplicación te va a decir 720 00:28:51,049 --> 00:28:53,309 oye, estás tirando de un hard que yo aquí no lo tengo 721 00:28:53,309 --> 00:28:55,029 entonces es la forma chapuza 722 00:28:55,029 --> 00:28:55,690 pero bueno 723 00:28:55,690 --> 00:28:58,190 hay una forma menos chapuza 724 00:28:58,190 --> 00:29:00,589 que es, en lugar de agregarlo 725 00:29:00,589 --> 00:29:02,509 como addExternalHard y que el hard 726 00:29:02,509 --> 00:29:03,670 esté en tu sistema de archivos, 727 00:29:04,670 --> 00:29:06,950 que el hard esté dentro de tu proyecto, 728 00:29:07,289 --> 00:29:08,730 dentro, y lo agregas 729 00:29:08,730 --> 00:29:10,589 como addHards. Entonces, él lo agrega 730 00:29:10,589 --> 00:29:12,470 como ruta relativa. Entonces, 731 00:29:12,609 --> 00:29:14,730 tú mueves la aplicación enterita con el hard dentro 732 00:29:14,730 --> 00:29:16,589 a otro ordenador. Como está agregado 733 00:29:16,589 --> 00:29:18,630 como ruta relativa, no hay ningún problema. 734 00:29:19,250 --> 00:29:20,329 Pero la aplicación 735 00:29:20,329 --> 00:29:22,490 va engordando, va engordando, va engordando, va engordando, 736 00:29:22,589 --> 00:29:24,589 porque si le metes todo el hard dentro... 737 00:29:28,099 --> 00:29:30,160 Bueno, hay otra 738 00:29:30,160 --> 00:29:31,900 arquitectura para hacerlo, en la que 739 00:29:31,900 --> 00:29:32,900 no lo llevas dentro 740 00:29:32,900 --> 00:29:37,539 sí, pero está automatizado 741 00:29:37,539 --> 00:29:39,900 entonces al estar todo automatizado 742 00:29:39,900 --> 00:29:42,019 tú le dices, necesito este 743 00:29:42,019 --> 00:29:43,839 hack, es lo que dices a Maven 744 00:29:43,839 --> 00:29:44,920 a Gravel, a esos sistemas 745 00:29:44,920 --> 00:29:47,559 y lo único que le dices es, esta aplicación 746 00:29:47,559 --> 00:29:48,940 necesita este hack 747 00:29:48,940 --> 00:29:51,059 y la aplicación cuando arranca 748 00:29:51,059 --> 00:29:52,859 sea en el equipo que sea 749 00:29:52,859 --> 00:29:54,440 te hace toda la gestión 750 00:29:54,440 --> 00:29:57,539 eso si hace falta internet para que la aplicación arranque 751 00:29:57,539 --> 00:29:59,839 te lo descarga, te lo pone en un repositorio interno 752 00:29:59,839 --> 00:30:01,240 que tú no sabes ni dónde está, ni te importa 753 00:30:01,240 --> 00:30:03,480 y trabaja con él, entonces es transparente para ti 754 00:30:03,480 --> 00:30:05,240 lo único que necesitas es que haya internet 755 00:30:05,240 --> 00:30:07,259 cuando arrancas la aplicación, es la manera 756 00:30:07,259 --> 00:30:09,339 en la que se suele hacer, pero la primera 757 00:30:09,339 --> 00:30:11,339 vez que la arrancas, porque una vez que ya te lo 758 00:30:11,339 --> 00:30:13,359 ha descargado un repositorio interno, las siguientes veces 759 00:30:13,359 --> 00:30:15,119 bueno, pues 760 00:30:15,119 --> 00:30:16,299 nosotros lo vamos a hacer así 761 00:30:16,299 --> 00:30:19,460 buscáis el driver 762 00:30:19,460 --> 00:30:21,460 correspondiente a la base de datos que sea 763 00:30:21,460 --> 00:30:23,259 el driver JDBC y lo importáis 764 00:30:23,259 --> 00:30:25,559 bueno, una vez que esas clases ya están 765 00:30:25,559 --> 00:30:27,400 ya podemos desde 766 00:30:27,400 --> 00:30:29,680 aquí usarlas para ejecutar el SQL 767 00:30:29,680 --> 00:30:33,059 entonces aquí se podrían haber hecho las cosas 768 00:30:33,059 --> 00:30:33,720 bien o mal 769 00:30:33,720 --> 00:30:36,880 pero afortunadamente desde hace ya 770 00:30:36,880 --> 00:30:37,759 bastante tiempo 771 00:30:37,759 --> 00:30:41,119 desde que, no desde los comienzos de Java 772 00:30:41,119 --> 00:30:42,519 sino desde que se dieron cuenta de que 773 00:30:42,519 --> 00:30:44,019 esto va creciendo, creciendo, creciendo 774 00:30:44,019 --> 00:30:46,480 y como no nos organizamos va a ser un pifoste 775 00:30:46,480 --> 00:30:48,559 pues desde hace ya bastante tiempo 776 00:30:48,559 --> 00:30:49,480 dijeron, vamos a ver 777 00:30:49,480 --> 00:30:52,980 si todo el mundo va a hacer 778 00:30:52,980 --> 00:30:55,339 accesos a bases de datos 779 00:30:55,339 --> 00:30:57,000 aunque con diferentes 780 00:30:57,000 --> 00:30:58,900 hard, vamos a unificar 781 00:30:58,900 --> 00:31:00,720 la forma de hacerlo, aunque 782 00:31:00,720 --> 00:31:02,720 tengan que usar hard distintos 783 00:31:02,720 --> 00:31:04,660 vamos a hacer una cosa 784 00:31:04,660 --> 00:31:06,960 vamos a meter en nuestra 785 00:31:06,960 --> 00:31:09,019 máquina virtual, en la JRE 786 00:31:09,019 --> 00:31:11,140 que es la que tienen todas las aplicaciones 787 00:31:11,140 --> 00:31:12,940 todas las aplicaciones 788 00:31:12,940 --> 00:31:15,079 tienen la JRE con clases dentro 789 00:31:15,079 --> 00:31:16,819 pues vamos a meter 790 00:31:16,819 --> 00:31:18,940 unas clases vacías 791 00:31:18,940 --> 00:31:21,019 que es una, o sea con métodos 792 00:31:21,019 --> 00:31:22,819 vacíos, que es una clase 793 00:31:22,819 --> 00:31:24,539 con métodos vacíos, una interfaz 794 00:31:24,539 --> 00:31:25,480 como bien sabéis 795 00:31:25,480 --> 00:31:28,480 pues vamos a meter 796 00:31:28,480 --> 00:31:29,619 yo que sé 797 00:31:29,619 --> 00:31:32,900 pues por ejemplo 798 00:31:32,900 --> 00:31:34,519 una clase que se llame 799 00:31:34,519 --> 00:31:36,200 driver manager 800 00:31:36,200 --> 00:31:41,369 y que esta clase te meta 801 00:31:41,369 --> 00:31:43,849 métodos vacíos del tipo 802 00:31:43,849 --> 00:31:45,809 crea conexión 803 00:31:45,809 --> 00:31:50,740 no pongo el nombre del método 804 00:31:50,740 --> 00:31:52,480 ejecuta sentencia 805 00:31:52,480 --> 00:31:55,599 entonces 806 00:31:55,599 --> 00:31:58,059 vacíos, entonces 807 00:31:58,059 --> 00:31:59,700 tu aplicación que va a hacer 808 00:31:59,700 --> 00:32:02,359 tu aplicación va a llamar a estos 809 00:32:02,359 --> 00:32:04,500 métodos, entonces todo el mundo 810 00:32:04,500 --> 00:32:05,980 me da igual que esté usando 811 00:32:05,980 --> 00:32:08,579 Oracle, MySQL, todo el mundo 812 00:32:08,579 --> 00:32:11,059 hace la aplicación de la misma manera 813 00:32:11,059 --> 00:32:12,839 que es llamando a los métodos 814 00:32:12,839 --> 00:32:15,000 de la interfaz, que está en la máquina virtual 815 00:32:15,000 --> 00:32:16,740 que es una especie de paraguas común 816 00:32:16,740 --> 00:32:18,619 que usan todos, pero claro 817 00:32:18,619 --> 00:32:20,660 estos métodos están vacíos 818 00:32:20,660 --> 00:32:21,980 entonces 819 00:32:21,980 --> 00:32:24,019 estos métodos 820 00:32:24,019 --> 00:32:26,319 se llenan 821 00:32:26,319 --> 00:32:28,660 automáticamente con el código 822 00:32:28,660 --> 00:32:29,640 que trae este driver 823 00:32:29,640 --> 00:32:32,480 claro, sin que hagamos nosotros nada 824 00:32:32,480 --> 00:32:34,980 entonces cuando tú importas 825 00:32:34,980 --> 00:32:36,940 el driver de una base de datos 826 00:32:36,940 --> 00:32:39,039 automáticamente 827 00:32:39,039 --> 00:32:40,799 esta, no es que se llenen 828 00:32:40,799 --> 00:32:42,460 es que esta clase 829 00:32:42,460 --> 00:32:45,160 trae las implementaciones de estas interfaces 830 00:32:45,160 --> 00:32:47,299 entonces cada driver 831 00:32:47,299 --> 00:32:49,519 trae las implementaciones 832 00:32:49,519 --> 00:32:50,640 los implements 833 00:32:50,640 --> 00:32:52,660 de estas que aquí están vacías 834 00:32:52,660 --> 00:32:55,140 pero como bien sabéis por el tema de la herencia 835 00:32:55,140 --> 00:32:56,940 uno en su aplicación llama 836 00:32:56,940 --> 00:32:58,940 a los métodos de la interfaz 837 00:32:58,940 --> 00:33:01,700 y automáticamente ¿qué es lo que se ejecuta? 838 00:33:01,799 --> 00:33:03,380 lo que se ejecuta es la implementación 839 00:33:03,380 --> 00:33:03,759 de abajo 840 00:33:03,759 --> 00:33:05,819 bueno, pues entonces 841 00:33:05,819 --> 00:33:07,319 tú importas el driver 842 00:33:07,319 --> 00:33:10,039 y ya está, y estás importando 843 00:33:10,039 --> 00:33:12,200 la implementación, pero tú llamas a los métodos 844 00:33:12,200 --> 00:33:13,579 que al año que viene 845 00:33:13,579 --> 00:33:16,019 tu aplicación cambia y has cambiado de base 846 00:33:16,019 --> 00:33:18,059 de datos, lo único 847 00:33:18,059 --> 00:33:19,200 que tienes que cambiar es el hard 848 00:33:19,200 --> 00:33:21,680 solo cambias el hard, no tienes que cambiar nada más 849 00:33:21,680 --> 00:33:23,619 porque la llamada a los métodos 850 00:33:23,619 --> 00:33:25,980 todo es igual, gracias a que 851 00:33:25,980 --> 00:33:27,559 está todo 852 00:33:27,559 --> 00:33:29,519 oculto, envuelto 853 00:33:29,519 --> 00:33:31,119 en que hay una interfaz 854 00:33:31,119 --> 00:33:33,059 es una interfaz 855 00:33:33,059 --> 00:33:34,759 o un conjunto de interfaces 856 00:33:34,759 --> 00:33:36,819 es lo que se llama API 857 00:33:36,819 --> 00:33:37,779 ¿vale? 858 00:33:38,859 --> 00:33:41,140 de Application Program Interface 859 00:33:41,140 --> 00:33:46,740 esto se llama API 860 00:33:46,740 --> 00:33:48,579 entonces ¿qué es un API? 861 00:33:48,880 --> 00:33:51,079 un API es un conjunto de métodos 862 00:33:51,079 --> 00:33:52,819 para hacer algo en concreto 863 00:33:52,819 --> 00:33:54,119 a lo que tu aplicación llama 864 00:33:54,119 --> 00:33:57,279 tu aplicación llama a una API para hacer cosas 865 00:33:57,279 --> 00:33:58,480 pero las APIs 866 00:33:58,480 --> 00:34:00,460 luego alguien las tiene que implementar 867 00:34:00,460 --> 00:34:19,579 Bueno, pues en este caso la API JDBC, porque estas clases de aquí, estas interfaces se llaman la API JDBC, pues a la API JDBC que nosotros llamamos para crear conexión, ejecuta sentencia, etcétera, etcétera, esta API la rellena por dentro este driver. 868 00:34:19,579 --> 00:34:21,780 simplemente por el hecho 869 00:34:21,780 --> 00:34:22,820 que importemos 870 00:34:22,820 --> 00:34:25,760 entonces ahora vuestra tarea 871 00:34:25,760 --> 00:34:27,559 pues aparte de hacer la base de datos 872 00:34:27,559 --> 00:34:29,679 mapear las clases, una vez 873 00:34:29,679 --> 00:34:30,739 seleccionadas 874 00:34:30,739 --> 00:34:33,840 las funcionalidades que queréis 875 00:34:33,840 --> 00:34:35,760 pues ver 876 00:34:35,760 --> 00:34:37,619 a qué métodos y cómo 877 00:34:37,619 --> 00:34:39,599 tenéis que llamar de esta API 878 00:34:39,599 --> 00:34:40,860 para 879 00:34:40,860 --> 00:34:43,880 hacer las cosas, que os adelanto 880 00:34:43,880 --> 00:34:45,920 que es siempre la misma arquitectura 881 00:34:45,920 --> 00:34:47,559 crear conexión 882 00:34:47,559 --> 00:34:50,860 Para crear conexión 883 00:34:50,860 --> 00:34:51,840 Veréis que hay que dar 884 00:34:51,840 --> 00:34:53,699 Pues la IP donde está mi base de datos 885 00:34:53,699 --> 00:34:55,280 El puerto en el que escuche, etc. 886 00:34:55,460 --> 00:34:57,539 Si la base de datos está en vuestro mismo equipo 887 00:34:57,539 --> 00:34:59,460 Pues la IP será localhost 888 00:34:59,460 --> 00:35:00,340 Vale 889 00:35:00,340 --> 00:35:02,619 Crear conexión 890 00:35:02,619 --> 00:35:05,699 Ejecutar la sentencia SQL que sea 891 00:35:05,699 --> 00:35:07,860 Para lo cual habrá que llamar a otro método 892 00:35:07,860 --> 00:35:08,920 De esta API 893 00:35:08,920 --> 00:35:10,340 Y luego cerrar conexión 894 00:35:10,340 --> 00:35:12,159 Ejecutar la sentencia 895 00:35:12,159 --> 00:35:14,460 Si ha sido un insert, un delete o lo que sea 896 00:35:14,460 --> 00:35:14,940 Pues ya está 897 00:35:14,940 --> 00:35:23,659 Si ha sido un seller, pues te devolverá algo y dentro de ese algo tendréis que meteros para sacarlo y ya rellenar las propiedades de los objetos. 898 00:35:24,460 --> 00:35:24,840 Y ya está. 899 00:35:26,320 --> 00:35:36,179 Entonces tenéis que ver cuáles son los métodos de esta API para usarlos para crear la conexión dentro de cada funcionalidad, 900 00:35:36,820 --> 00:35:41,219 ejecutar la sentencia que toque, cerrar conexión y ya está. 901 00:35:41,219 --> 00:35:44,119 y una vez ejecutada la sentencia, pues los datos manejarlos 902 00:35:44,119 --> 00:35:45,579 claro, manejarlos, pero eso ya es hard 903 00:35:45,579 --> 00:35:47,980 ¿no se deja la conexión abierta hasta que vayas a terminar 904 00:35:47,980 --> 00:35:48,360 y trabajar? 905 00:35:50,800 --> 00:35:52,519 a ver, no es lo recomendable 906 00:35:52,519 --> 00:35:53,699 lo normal, como 907 00:35:53,699 --> 00:35:55,239 estas son 908 00:35:55,239 --> 00:35:57,780 son funcionalidades atómicas, digamos 909 00:35:57,780 --> 00:36:00,159 tú cuando las usas, creas una conexión y ya está 910 00:36:00,159 --> 00:36:01,820 se puede hacer a veces, una cosa que se llama 911 00:36:01,820 --> 00:36:04,280 un pool de conexiones, que es tener varias abiertas 912 00:36:04,280 --> 00:36:05,860 para cada método 913 00:36:05,860 --> 00:36:07,719 te selecciona una y luego la suelta 914 00:36:07,719 --> 00:36:09,940 pues un poco para optimizar 915 00:36:09,940 --> 00:36:11,480 la rapidez de los 916 00:36:11,480 --> 00:36:13,619 accesos, cuando se usa una herramienta de esas 917 00:36:13,619 --> 00:36:15,099 ella ya se crea su propio pool 918 00:36:15,099 --> 00:36:17,500 pero lo habitual es que 919 00:36:17,500 --> 00:36:19,219 tú no la dejes abierta 920 00:36:19,219 --> 00:36:20,099 porque eso 921 00:36:20,099 --> 00:36:22,760 siempre puede tener efectos colaterales 922 00:36:22,760 --> 00:36:25,000 para los commit, para todo eso 923 00:36:25,000 --> 00:36:25,880 para los rollback 924 00:36:25,880 --> 00:36:29,900 pues nada, esto es lo que tenéis que hacer 925 00:36:29,900 --> 00:36:30,820 que guay 926 00:36:30,820 --> 00:36:31,320 ya está 927 00:36:31,320 --> 00:36:34,960 ya habéis pensado que vais a gestionar 928 00:36:34,960 --> 00:36:37,039 uy 14 929 00:36:37,039 --> 00:36:37,679 que suerte 930 00:36:37,679 --> 00:36:39,340 dime 931 00:36:39,340 --> 00:36:44,260 pues ya veréis que interesante es el año que viene 932 00:36:44,260 --> 00:36:44,639 esto 933 00:36:44,639 --> 00:36:46,480 divertidísimo 934 00:36:46,480 --> 00:36:48,280 no, que sí, que sí