1 00:00:00,000 --> 00:00:00,840 A ver, ¿cuándo se pone? 2 00:00:00,840 --> 00:00:01,720 Puedes hablar, Jesús. 3 00:00:01,919 --> 00:00:02,339 Muchas gracias. 4 00:00:02,899 --> 00:00:04,059 ¿Cuándo se pone execute, 5 00:00:04,400 --> 00:00:05,940 query y update? 6 00:00:06,160 --> 00:00:07,339 O sea, ¿en qué caso se pone uno? 7 00:00:07,339 --> 00:00:08,580 A ver, tenemos sentencias de CRUD 8 00:00:08,580 --> 00:00:10,519 y sentencias de manipulación 9 00:00:10,519 --> 00:00:11,679 de la base de datos en general. 10 00:00:12,320 --> 00:00:13,580 Las sentencias de CRUD son 11 00:00:13,580 --> 00:00:16,780 las que hacen insert, update, delete o select. 12 00:00:17,079 --> 00:00:17,780 Esas son las de CRUD. 13 00:00:18,120 --> 00:00:18,500 ¿Y de DROP? 14 00:00:20,120 --> 00:00:21,899 DROP no, porque esa no es de CRUD. 15 00:00:21,980 --> 00:00:23,239 Esa te borra la base de datos enterita. 16 00:00:23,719 --> 00:00:24,500 DROP database no. 17 00:00:25,019 --> 00:00:25,859 Las de CRUD son 18 00:00:25,859 --> 00:00:28,179 delete, update, insert y select. 19 00:00:28,179 --> 00:00:28,519 Vale. 20 00:00:28,519 --> 00:00:29,839 esas 21 00:00:29,839 --> 00:00:31,660 la de select 22 00:00:31,660 --> 00:00:32,820 es una query 23 00:00:32,820 --> 00:00:34,159 se hace con execute query 24 00:00:34,159 --> 00:00:35,179 y te devuelve 25 00:00:35,179 --> 00:00:35,640 un objeto 26 00:00:35,640 --> 00:00:36,240 result set 27 00:00:36,240 --> 00:00:36,979 que ya manejaremos 28 00:00:36,979 --> 00:00:37,579 cuando hagamos 29 00:00:37,579 --> 00:00:38,600 un execute query 30 00:00:38,600 --> 00:00:40,299 y las otras tres 31 00:00:40,299 --> 00:00:41,399 update, delete 32 00:00:41,399 --> 00:00:41,840 y 33 00:00:41,840 --> 00:00:43,020 se ejecutan 34 00:00:43,020 --> 00:00:44,259 con execute update 35 00:00:44,259 --> 00:00:45,140 las tres 36 00:00:45,140 --> 00:00:46,719 esas no te devuelven 37 00:00:46,719 --> 00:00:47,119 datos 38 00:00:47,119 --> 00:00:48,100 te devuelven información 39 00:00:48,100 --> 00:00:49,219 que tú puedes recoger 40 00:00:49,219 --> 00:00:49,920 si quieres o no 41 00:00:49,920 --> 00:00:51,560 pues filas que he actualizado 42 00:00:51,560 --> 00:00:52,159 cosas 43 00:00:52,159 --> 00:00:53,479 tú la puedes recoger 44 00:00:53,479 --> 00:00:53,780 o no 45 00:00:53,780 --> 00:00:54,179 ¿vale? 46 00:00:54,200 --> 00:00:55,479 no es como la execute query 47 00:00:55,479 --> 00:00:56,240 que te tienes que quedar 48 00:00:56,240 --> 00:00:56,960 con el select 49 00:00:56,960 --> 00:00:57,759 ¿vale? 50 00:00:57,759 --> 00:01:00,079 Y luego hay sentencias que no son de cruz 51 00:01:00,079 --> 00:01:02,439 Pues de alterar un esquema, poner una clave 52 00:01:02,439 --> 00:01:04,620 Hacer cualquier cosa que haces con SQL 53 00:01:04,620 --> 00:01:07,000 Pues esas con el execute a palo seco 54 00:01:07,000 --> 00:01:07,359 Y ya está 55 00:01:07,359 --> 00:01:09,599 Ese es el principio básico general 56 00:01:09,599 --> 00:01:12,599 Que luego en cada clase de estas de JBC 57 00:01:12,599 --> 00:01:14,319 Luego tiene un montón de mamonaditas 58 00:01:14,319 --> 00:01:15,299 Pero bueno, esto es luego 59 00:01:15,299 --> 00:01:16,280 ¿Vale? 60 00:01:17,319 --> 00:01:21,620 Entonces, bueno, pues 61 00:01:21,620 --> 00:01:23,900 Habíamos dicho que esto de aquí 62 00:01:23,900 --> 00:01:25,359 Es que es verdad que con tantas clases 63 00:01:25,359 --> 00:01:27,200 Esto es un desmadre 64 00:01:27,200 --> 00:01:32,200 que esto de aquí es feo 65 00:01:32,200 --> 00:01:33,420 muy feo 66 00:01:33,420 --> 00:01:36,319 por el INGE, por la inyección de SQL 67 00:01:36,319 --> 00:01:38,439 pero eso lo arreglamos en la siguiente 68 00:01:38,439 --> 00:01:39,620 práctica que hagamos 69 00:01:39,620 --> 00:01:42,560 lo arreglamos con una sentencia precompilada 70 00:01:42,560 --> 00:01:44,040 y ya está, ¿vale? 71 00:01:44,159 --> 00:01:44,799 y excelente 72 00:01:44,799 --> 00:01:48,260 un prepare statement 73 00:01:48,260 --> 00:01:50,780 ¿no lo pusisteis en el trabajito del año pasado? 74 00:01:50,780 --> 00:01:52,519 sí, sí, pero es hacer lo mismo 75 00:01:52,519 --> 00:01:53,640 claro, es hacer lo mismo 76 00:01:53,640 --> 00:01:56,079 pero al precompilar el SQL 77 00:01:56,079 --> 00:01:57,219 ya no 78 00:01:57,219 --> 00:01:58,379 lo dejas ya 79 00:01:58,379 --> 00:01:59,319 en un formato 80 00:01:59,319 --> 00:02:00,060 diferente al string 81 00:02:00,060 --> 00:02:00,760 con lo cual 82 00:02:00,760 --> 00:02:01,140 ya no puedes 83 00:02:01,140 --> 00:02:01,799 hacer la inyección 84 00:02:01,799 --> 00:02:02,480 ¿ya no lo ves? 85 00:02:03,040 --> 00:02:03,700 ¿ya no lo ves? 86 00:02:04,579 --> 00:02:05,420 pero cuando 87 00:02:05,420 --> 00:02:06,099 lo vas a un 88 00:02:06,099 --> 00:02:06,939 ¿te acuerdas 89 00:02:06,939 --> 00:02:07,260 si es que 90 00:02:07,260 --> 00:02:07,939 lo comprobamos 91 00:02:07,939 --> 00:02:08,280 tú y yo 92 00:02:08,280 --> 00:02:09,199 que lo pasas 93 00:02:09,199 --> 00:02:10,740 a que te descompila 94 00:02:10,740 --> 00:02:11,560 lo sacas 95 00:02:11,560 --> 00:02:14,860 pero a ver 96 00:02:14,860 --> 00:02:15,580 sí pero tienes que 97 00:02:15,580 --> 00:02:16,020 tener el código 98 00:02:16,020 --> 00:02:16,659 de la aplicación 99 00:02:16,659 --> 00:02:17,460 o sea estamos hablando 100 00:02:17,460 --> 00:02:18,060 que yo tengo 101 00:02:18,060 --> 00:02:18,599 mi vista 102 00:02:18,599 --> 00:02:19,419 con mi aplicación 103 00:02:19,419 --> 00:02:20,439 y lo paso 104 00:02:20,439 --> 00:02:21,099 en un formulario 105 00:02:21,099 --> 00:02:21,599 el string 106 00:02:21,599 --> 00:02:22,319 claro 107 00:02:22,319 --> 00:02:23,020 hombre tú tienes 108 00:02:23,020 --> 00:02:23,419 el código 109 00:02:23,419 --> 00:02:24,159 de la aplicación 110 00:02:24,159 --> 00:02:24,680 lo haces donde 111 00:02:24,680 --> 00:02:25,060 compila 112 00:02:25,060 --> 00:02:25,919 y ahí tienes todo 113 00:02:25,919 --> 00:02:26,259 claro 114 00:02:26,259 --> 00:02:29,300 Hombre, claro 115 00:02:29,300 --> 00:02:31,539 Si sacas el properties, imagínate 116 00:02:31,539 --> 00:02:33,580 Vale, pues esto ya lo 117 00:02:33,580 --> 00:02:35,159 Quitaremos para que sea más bonito 118 00:02:35,159 --> 00:02:37,680 Con el prepare statement, también haremos 119 00:02:37,680 --> 00:02:39,560 Select, pues para iterar por 120 00:02:39,560 --> 00:02:41,639 ResultSet, eso en un plis-plas el próximo 121 00:02:41,639 --> 00:02:43,879 Día, y que plis-plas 122 00:02:43,879 --> 00:02:45,280 Nos queda ahora antes de irnos 123 00:02:45,280 --> 00:02:47,840 Pues hombre, vamos a 124 00:02:47,840 --> 00:02:50,240 Meterle un pool de conexiones 125 00:02:50,240 --> 00:02:51,759 Por si acaso 126 00:02:51,759 --> 00:02:54,120 Esta aplicación se hace multilo, no me gusta 127 00:02:54,120 --> 00:02:55,860 Usar solo una conexión, que abro 128 00:02:55,860 --> 00:02:57,900 aquí y ya está, vamos a meterle 129 00:02:57,900 --> 00:02:59,039 un pool de conexiones 130 00:02:59,039 --> 00:03:02,080 lo podemos meter aquí en este mismo singleton 131 00:03:02,080 --> 00:03:03,039 para que nos funcione 132 00:03:03,039 --> 00:03:05,719 como singleton de la conexión 133 00:03:05,719 --> 00:03:07,659 y singleton del pool 134 00:03:07,659 --> 00:03:10,379 voy a hacerme aquí un pool de conexiones 135 00:03:10,379 --> 00:03:18,439 este va a ser 136 00:03:18,439 --> 00:03:20,199 mi pool que yo devolveré 137 00:03:20,199 --> 00:03:21,800 con un get pool, ¿verdad? 138 00:03:23,960 --> 00:03:24,520 obviamente 139 00:03:24,520 --> 00:03:25,120 hombre 140 00:03:25,120 --> 00:03:27,099 por dios 141 00:03:27,099 --> 00:03:36,129 public static 142 00:03:36,129 --> 00:03:38,330 sí, que listilla eres 143 00:03:38,330 --> 00:03:45,969 A ver, que lo he puesto aquí 144 00:03:45,969 --> 00:03:47,550 porque todavía no hemos dicho el tipo 145 00:03:47,550 --> 00:03:48,909 Claro, entonces 146 00:03:48,909 --> 00:03:51,830 ¿Qué tipo de datos es el tipo 147 00:03:51,830 --> 00:03:53,229 pool de conexiones? 148 00:03:53,930 --> 00:03:55,250 Uno diría pool 149 00:03:55,250 --> 00:03:57,169 o diría connection pool 150 00:03:57,169 --> 00:03:58,469 o diría no sé qué 151 00:03:58,469 --> 00:03:59,990 Pues es data source 152 00:03:59,990 --> 00:04:05,080 Creo 153 00:04:05,080 --> 00:04:08,039 porque ya me tenéis la memoria frita 154 00:04:08,039 --> 00:04:11,699 Data source 155 00:04:11,699 --> 00:04:13,960 ¿De qué? De Java SQL 156 00:04:13,960 --> 00:04:16,019 Vale, es este 157 00:04:16,019 --> 00:04:19,500 Ahora es donde me toca a mí 158 00:04:19,500 --> 00:04:21,779 Instanciar aquí el data source 159 00:04:21,779 --> 00:04:22,300 Este 160 00:04:22,300 --> 00:04:36,379 Vale 161 00:04:36,379 --> 00:04:38,699 En mi data source este 162 00:04:38,699 --> 00:04:40,860 Lo tengo que instanciar, ahora ya sí 163 00:04:40,860 --> 00:04:42,920 Si mi 164 00:04:42,920 --> 00:04:44,139 pool es 165 00:04:44,139 --> 00:04:46,540 igual a null 166 00:04:46,540 --> 00:04:48,180 lo instancio 167 00:04:48,180 --> 00:04:50,879 vale, ¿cómo instancio un pool 168 00:04:50,879 --> 00:04:53,100 de conexiones? pues esto de nuevo 169 00:04:53,100 --> 00:04:55,060 es una interfaz, es una clase abstracta 170 00:04:55,060 --> 00:04:56,339 o es algo vacío 171 00:04:56,339 --> 00:04:58,540 tenemos que darle una implementación 172 00:04:58,540 --> 00:05:01,240 hay muchas implementaciones para pool de conexiones 173 00:05:01,240 --> 00:05:02,480 hay un montón 174 00:05:02,480 --> 00:05:04,439 ¿cuál vamos a coger? 175 00:05:05,319 --> 00:05:06,220 pues yo que sé 176 00:05:06,220 --> 00:05:09,300 la que más se usa en principio 177 00:05:09,300 --> 00:05:10,920 sería 178 00:05:10,920 --> 00:05:13,120 esta que tengo yo aquí abierta 179 00:05:13,120 --> 00:05:14,519 en otro proyecto 180 00:05:14,519 --> 00:05:17,399 pero vamos a preguntarle ya que estáis tan 181 00:05:17,399 --> 00:05:21,060 ¿qué? 182 00:05:21,199 --> 00:05:23,139 además con tildes y mayúsculas para no gastar agua 183 00:05:23,139 --> 00:05:24,519 ¿qué 184 00:05:24,519 --> 00:05:27,120 implementación 185 00:05:28,759 --> 00:05:29,220 de 186 00:05:29,220 --> 00:05:30,240 pool 187 00:05:30,240 --> 00:05:33,120 pool de conexiones 188 00:05:34,120 --> 00:05:37,279 para data source 189 00:05:37,279 --> 00:05:39,120 es la más 190 00:05:39,120 --> 00:05:41,120 más usada, qué mal 191 00:05:41,120 --> 00:05:43,379 lo he escrito, sería cuál implementación 192 00:05:43,379 --> 00:05:45,100 no, bueno, da igual, es la más usada 193 00:05:45,100 --> 00:05:47,019 actualmente, aunque yo no sé 194 00:05:47,019 --> 00:05:48,980 qué significa actualmente para echar GPT 195 00:05:48,980 --> 00:05:51,000 ¿sabéis cada cuánto actualizan su base de datos? 196 00:05:51,079 --> 00:05:54,259 o es todo el rato 197 00:05:54,259 --> 00:05:55,720 si yo pongo eso 198 00:05:55,720 --> 00:05:59,000 actualmente quiero decir, ¿significa 199 00:05:59,000 --> 00:06:01,000 algo en mi conversación con una IA o no significa 200 00:06:01,000 --> 00:06:01,220 nada? 201 00:06:05,009 --> 00:06:05,410 claro 202 00:06:05,410 --> 00:06:08,410 vale 203 00:06:08,410 --> 00:06:13,910 más vale que me diga de la que tengo la chuleta 204 00:06:14,050 --> 00:06:18,050 Fijaos que estamos en un nivel 205 00:06:18,050 --> 00:06:19,050 Pro de backend 206 00:06:19,050 --> 00:06:21,329 Toma ya 207 00:06:21,329 --> 00:06:23,310 Ikari, que suerte hemos tenido 208 00:06:23,310 --> 00:06:24,290 Vale 209 00:06:24,290 --> 00:06:27,350 Ikari 210 00:06:27,350 --> 00:06:29,189 Como bien dice él, no yo 211 00:06:29,189 --> 00:06:31,230 Es el estándar 212 00:06:31,230 --> 00:06:34,449 De facto para pool de conexiones 213 00:06:34,449 --> 00:06:38,149 Para todos estos, estos lo usan 214 00:06:38,149 --> 00:06:38,529 ¿Vale? 215 00:06:38,949 --> 00:06:41,889 Y si lo usan todos estos, que estas serían capas 216 00:06:41,889 --> 00:06:43,629 Que van por encima de 217 00:06:43,629 --> 00:06:46,209 JDBC, todo esto va montado 218 00:06:46,209 --> 00:06:47,649 por encima de lo que hemos visto ahora 219 00:06:47,649 --> 00:06:49,410 por encima de JDBC 220 00:06:49,410 --> 00:06:51,810 pues si lo usan esto, vamos a usarlo nosotros 221 00:06:51,810 --> 00:06:54,089 de hecho 222 00:06:54,089 --> 00:06:56,290 es que es un print por defecto 223 00:06:56,290 --> 00:06:58,009 ya te, como me está diciendo aquí 224 00:06:58,009 --> 00:06:59,730 ya te crea este pool en instancia 225 00:06:59,730 --> 00:07:02,550 nosotros como no estamos usando ninguna capita de abstracción 226 00:07:02,550 --> 00:07:04,189 directamente todo a mano 227 00:07:04,189 --> 00:07:06,089 vamos a tener que hacer nuestro propio 228 00:07:06,089 --> 00:07:06,870 pool nosotros 229 00:07:06,870 --> 00:07:09,990 porque estamos poniendo 230 00:07:09,990 --> 00:07:11,329 las capas una tras otra 231 00:07:11,329 --> 00:07:23,329 Vamos a ir poniéndole capas de abstracción 232 00:07:23,329 --> 00:07:24,750 Claro, pero es que así funcionan las cosas 233 00:07:24,750 --> 00:07:26,250 Sí, pero aquí si me apuras 234 00:07:26,250 --> 00:07:28,850 Es que tú, JDBC, lo tienes que conocer 235 00:07:28,850 --> 00:07:30,610 No puedes irte de aquí 236 00:07:30,610 --> 00:07:33,750 Sé hacer un acceso a datos con Spring 237 00:07:33,750 --> 00:07:35,310 Pues te vas de aquí 238 00:07:35,310 --> 00:07:38,870 Pues yo qué sé 239 00:07:38,870 --> 00:07:41,290 Siendo una adolescente de Java 240 00:07:41,290 --> 00:07:43,250 ¿Vale? No puede ser 241 00:07:43,250 --> 00:07:45,509 JDBC, hay que conocerlo 242 00:07:45,509 --> 00:07:46,810 Es lo básico 243 00:07:46,810 --> 00:07:48,089 ¿Vale? 244 00:07:49,449 --> 00:07:50,589 Y os lo vais a encontrar 245 00:07:50,589 --> 00:07:53,430 En muchos, todavía en sitios 246 00:07:53,430 --> 00:07:53,709 ¿Eh? 247 00:07:55,509 --> 00:07:57,129 Seguramente podéis ir a hacer prácticas 248 00:07:57,129 --> 00:07:59,529 A algún sitio que hasta el año pasado 249 00:07:59,529 --> 00:08:00,629 Ha ocurrido 250 00:08:00,629 --> 00:08:02,670 Y parte del código pues 251 00:08:02,670 --> 00:08:04,430 Está hecho con JDBC 252 00:08:04,430 --> 00:08:10,240 Vale, pues a ver, vamos a usar Ikari 253 00:08:10,240 --> 00:08:11,920 ¿Cómo se implementa 254 00:08:11,920 --> 00:08:14,199 Un pool de conexiones con Ikari? 255 00:08:14,459 --> 00:08:16,560 Pues ahora ya sí que sí, esto lo voy a copiar 256 00:08:16,560 --> 00:08:18,079 Porque si no me vuelvo loca 257 00:08:18,079 --> 00:08:19,160 ¿Vale? 258 00:08:23,000 --> 00:08:23,439 Esto 259 00:08:23,439 --> 00:08:25,459 Sí, sí, sí, sí 260 00:08:25,459 --> 00:08:27,379 Os doy tiempo 261 00:08:27,379 --> 00:08:29,959 A ver 262 00:08:29,959 --> 00:08:34,240 Un momentito, que esta declaración la saco fuera 263 00:08:34,240 --> 00:08:38,100 ¿Eh? 264 00:08:38,639 --> 00:08:39,720 Sí, sí, sí 265 00:08:39,720 --> 00:08:42,299 Hay que poner la dependencia, un momentito 266 00:08:42,299 --> 00:08:51,799 perdón, que es que 267 00:08:51,799 --> 00:08:53,559 estoy volviendo tonta 268 00:08:53,559 --> 00:08:54,840 entonces 269 00:08:54,840 --> 00:08:57,419 esto sería pool 270 00:08:57,419 --> 00:09:05,139 vale, ahora ponemos la dependencia 271 00:09:05,139 --> 00:09:09,309 entonces, esta es 272 00:09:09,309 --> 00:09:11,429 una posible 273 00:09:11,429 --> 00:09:13,029 implementación de data source 274 00:09:13,029 --> 00:09:15,269 una posible implementación, es esta 275 00:09:15,269 --> 00:09:16,690 que voy a guardar en pool 276 00:09:16,690 --> 00:09:18,389 una posible implementación 277 00:09:18,389 --> 00:09:21,389 y la configuro con esto de aquí 278 00:09:21,389 --> 00:09:24,750 Entonces este es un pool de conexiones 279 00:09:24,750 --> 00:09:26,690 Para la base de datos que yo le diga aquí 280 00:09:26,690 --> 00:09:28,769 Que en mi caso va a ser 281 00:09:28,769 --> 00:09:29,330 Coches 282 00:09:29,330 --> 00:09:32,230 Este es un pool de conexiones 283 00:09:32,230 --> 00:09:34,750 Y ahora ya este método me devolvería 284 00:09:35,370 --> 00:09:36,870 Pool 285 00:09:36,870 --> 00:09:40,250 Nos devolvería pool 286 00:09:40,250 --> 00:09:42,549 Vale, pero obviamente nos falta 287 00:09:42,549 --> 00:09:44,250 La dependencia 288 00:09:44,909 --> 00:09:46,169 Porque Icari no viene 289 00:09:46,169 --> 00:09:47,750 Es una implementación más 290 00:09:47,750 --> 00:09:49,909 Y no viene con JDK como era de 291 00:09:49,909 --> 00:09:50,789 Esperar 292 00:09:50,789 --> 00:09:52,070 Entonces 293 00:09:52,070 --> 00:09:55,330 Si vosotros buscáis 294 00:09:55,330 --> 00:09:57,190 En el repositorio de Maven 295 00:09:57,190 --> 00:10:02,990 Espera, se lo voy a pedir a HGPT 296 00:10:02,990 --> 00:10:04,389 Porque en el repositorio de Maven 297 00:10:04,389 --> 00:10:06,330 Tienes que hacer unas 298 00:10:06,330 --> 00:10:08,970 Búsquedas enlazadas 299 00:10:08,970 --> 00:10:09,789 Y es un rollo 300 00:10:09,789 --> 00:10:11,309 Entonces, como vosotros en la realidad 301 00:10:11,309 --> 00:10:13,110 Se lo diríais a él, ¿verdad? 302 00:10:13,250 --> 00:10:14,590 En lugar de buscar el repositorio de Maven 303 00:10:14,590 --> 00:10:15,009 ¿A que sí? 304 00:10:19,409 --> 00:10:19,809 Dame 305 00:10:19,809 --> 00:10:21,889 El POM 306 00:10:21,889 --> 00:10:23,730 Para usar Icari 307 00:10:23,730 --> 00:10:26,149 Vosotros no le dais tantos detalles, ¿verdad? 308 00:10:26,230 --> 00:10:27,029 Pondríais POM 309 00:10:27,029 --> 00:10:29,370 Y ya está, y no le diríais más 310 00:10:29,370 --> 00:10:31,490 Joder, es que cómo sois 311 00:10:31,490 --> 00:10:34,649 Y luego, ¿entre vosotros os entendéis cuando habláis los unos con los otros? 312 00:10:36,649 --> 00:10:38,429 A ver, o sea, pondríais POM 313 00:10:38,429 --> 00:10:39,169 Y ya está 314 00:10:39,169 --> 00:10:53,029 El conector lo tenemos 315 00:10:53,029 --> 00:10:54,769 A ver, juraría que 316 00:10:54,769 --> 00:10:56,590 Sí, sí, sí, pero es que 317 00:10:56,590 --> 00:11:00,029 Creo que con esto va a faltar una 318 00:11:00,029 --> 00:11:01,429 Paso obligado 319 00:11:01,429 --> 00:11:02,809 Creo que 320 00:11:02,809 --> 00:11:05,190 A ver, vamos a poner esta sola 321 00:11:05,190 --> 00:11:06,950 Pero creo que le va a faltar una 322 00:11:06,950 --> 00:11:09,370 Sí, pero esta es la del conector que ya la tenemos 323 00:11:09,370 --> 00:11:11,149 Venga 324 00:11:11,149 --> 00:11:12,409 Vamos a poner esta 325 00:11:12,409 --> 00:11:14,350 O sea, con esta va a compilar 326 00:11:14,350 --> 00:11:17,029 Pero no sé si va a ejecutar bien 327 00:11:17,029 --> 00:11:18,950 Porque le va a faltar el log 328 00:11:18,950 --> 00:11:21,090 Le falta una librería de logs 329 00:11:21,090 --> 00:11:23,049 Porque esta usa una librería de logs 330 00:11:23,049 --> 00:11:24,230 Que no trae dentro 331 00:11:24,230 --> 00:11:28,330 ¿Te la ha dado cuando lo has buscado en el repositorio? 332 00:11:28,769 --> 00:11:29,529 No, le he dicho 333 00:11:29,529 --> 00:11:35,549 Algo de log te tiene que haber dado 334 00:11:35,549 --> 00:11:37,090 Porque si no este se queda corto 335 00:11:37,090 --> 00:11:40,649 Vale, entonces 336 00:11:40,649 --> 00:11:42,929 Yo aquí 337 00:11:42,929 --> 00:11:45,129 En el pom 338 00:11:45,129 --> 00:11:52,559 Le pongo esto 339 00:11:52,559 --> 00:11:54,379 Y ya 340 00:11:54,379 --> 00:11:59,720 Sí, la dependencia 341 00:11:59,720 --> 00:12:00,519 Está 342 00:12:00,519 --> 00:12:11,279 Es que lo he cerrado 343 00:12:11,279 --> 00:12:13,600 Espera, me hace una cosa 344 00:12:13,600 --> 00:12:15,159 Que termine todo el mundo de copiar esto 345 00:12:15,159 --> 00:12:16,919 Y luego ya salga la falta de dependencia y que lo ponga 346 00:12:16,919 --> 00:12:20,299 ¿Todo el mundo ha copiado esto? 347 00:12:20,299 --> 00:12:27,379 Bueno, a ver, perdonadme 348 00:12:27,379 --> 00:12:28,220 Cuando copia y pega 349 00:12:28,220 --> 00:12:31,220 Esto tendría que salir del properties, lógicamente 350 00:12:31,220 --> 00:12:32,960 ¿Vale? 351 00:12:33,720 --> 00:12:35,460 Esto tendría que salir del properties 352 00:12:35,460 --> 00:12:38,679 Porque aquí arriba, ¿veis? 353 00:12:39,440 --> 00:12:40,220 Aquí arriba 354 00:12:40,220 --> 00:12:45,250 Es decir, tendría que hacer esto mismo 355 00:12:45,250 --> 00:12:45,870 Que he hecho aquí 356 00:12:45,870 --> 00:12:51,950 Esto que salga del properties 357 00:12:51,950 --> 00:12:54,029 Por Dios, si no, no hemos hecho nada 358 00:12:54,029 --> 00:12:55,210 Y aquí 359 00:12:55,210 --> 00:12:56,769 Claro 360 00:12:56,769 --> 00:12:58,409 Aquí sería 361 00:12:58,409 --> 00:13:01,210 Prop.getProperty 362 00:13:01,210 --> 00:13:03,669 Sí, podríamos sacar el property pero 363 00:13:03,669 --> 00:13:06,409 No vamos a hacer otra clase 364 00:13:06,409 --> 00:13:07,429 Nada más para sacar el property 365 00:13:07,429 --> 00:13:10,330 O sacarlo a un método 366 00:13:10,330 --> 00:13:12,190 Yo lo decía sacarlo a un método 367 00:13:12,190 --> 00:13:13,889 Sí, claro 368 00:13:13,889 --> 00:13:15,970 Sacarlo a un método dentro de esta clase 369 00:13:15,970 --> 00:13:17,509 Pues sí, pero bueno 370 00:13:17,509 --> 00:13:18,570 Ya hemos arrancado así 371 00:13:18,570 --> 00:13:21,970 Prop.getProperty 372 00:13:21,970 --> 00:13:23,610 Property 373 00:13:23,610 --> 00:13:30,250 Sí, una clase 374 00:13:30,250 --> 00:13:32,990 Claro, una clase que además 375 00:13:32,990 --> 00:13:34,370 Sea un singleton del properties 376 00:13:34,370 --> 00:13:36,769 Que haya solo un properties del que tiren todos 377 00:13:36,769 --> 00:13:38,070 Eso sería lo ideal 378 00:13:38,070 --> 00:13:39,570 ¿Vale? 379 00:13:41,169 --> 00:13:42,250 Eso sería lo ideal 380 00:13:42,250 --> 00:13:44,750 Pero no vamos a meter otro singleton para el properties 381 00:13:44,750 --> 00:13:45,490 Porque 382 00:13:45,490 --> 00:13:49,009 Os enfadáis porque sois unos flojos 383 00:13:49,009 --> 00:13:58,669 Y me sobra un paréntesis 384 00:13:58,669 --> 00:14:00,950 Ah, es verdad 385 00:14:00,950 --> 00:14:02,230 Que el pobre no ve hoy 386 00:14:02,230 --> 00:14:05,190 Mala clase para copiar, efectivamente 387 00:14:05,190 --> 00:14:09,889 Espera, espera 388 00:14:09,889 --> 00:14:16,690 Justo cuando ha terminado, lo he puesto grande 389 00:14:16,690 --> 00:14:29,649 A ver, el prop es lo mismo de arriba 390 00:14:29,649 --> 00:14:32,190 Claro, copia y pegado 391 00:14:32,190 --> 00:14:34,149 Que hombre, me ha quedado feo el fichero 392 00:14:34,149 --> 00:14:35,350 Debería sacar el properties 393 00:14:35,350 --> 00:14:38,309 Fuera, para no, porque es un copia y pega 394 00:14:38,309 --> 00:14:40,049 Pero bueno, vamos a dejar de poner 395 00:14:40,049 --> 00:14:41,909 Lo que le decía él, que lo ideal sería 396 00:14:41,909 --> 00:14:43,929 Hacer otro singleton para el properties 397 00:14:43,929 --> 00:14:45,690 Para que el properties 398 00:14:45,690 --> 00:14:48,129 solo tenga una instancia en todo él 399 00:14:48,129 --> 00:14:49,850 ¿vale? entonces como veis aquí 400 00:14:49,850 --> 00:14:51,090 hay una serie de gestiones 401 00:14:51,090 --> 00:14:53,870 gestiones de los 402 00:14:53,870 --> 00:14:55,970 bins, de las propias clases, pues el properties 403 00:14:55,970 --> 00:14:57,289 la conexión, el no sé qué 404 00:14:57,289 --> 00:14:58,269 perdón 405 00:14:58,269 --> 00:15:05,870 gestión de los trycatch 406 00:15:05,870 --> 00:15:07,669 hay un montón de gestiones que las capas 407 00:15:07,669 --> 00:15:09,250 adicionales son las que te lo van haciendo 408 00:15:09,250 --> 00:15:11,870 pero lo que te van haciendo ellos es lo que hay 409 00:15:11,870 --> 00:15:13,049 aquí debajo, es que no hay otra 410 00:15:13,049 --> 00:15:19,509 Ah, es que ahora lo explicamos 411 00:15:19,509 --> 00:15:20,509 Ahora lo explicamos, ¿vale? 412 00:15:21,049 --> 00:15:22,629 Ahora lo tenía puesto ahí para que no se me olvidara 413 00:15:22,629 --> 00:15:25,490 Vale, estos tres primeros parámetros 414 00:15:25,490 --> 00:15:26,710 Del pool están claros 415 00:15:26,710 --> 00:15:29,389 Son los tres parámetros 416 00:15:29,389 --> 00:15:30,149 Que necesitamos 417 00:15:30,149 --> 00:15:33,149 Entonces el pool se va a enganchar a esa base de datos 418 00:15:33,149 --> 00:15:35,250 Y aquí, pues estos son 419 00:15:35,250 --> 00:15:36,830 Parámetros que se pueden configurar 420 00:15:36,830 --> 00:15:38,690 Hay más parámetros que se pueden configurar 421 00:15:38,690 --> 00:15:41,629 Si no los configuramos, coge unos por defecto 422 00:15:41,629 --> 00:15:41,950 Creo 423 00:15:41,950 --> 00:15:44,370 o eso me ha parecido comprobado alguna vez 424 00:15:44,370 --> 00:15:46,269 pero bueno, está claro lo que significa 425 00:15:46,269 --> 00:15:47,490 pues 426 00:15:47,490 --> 00:15:50,210 el tamaño máximo 427 00:15:50,210 --> 00:15:52,570 ¿vale? de conexiones 428 00:15:52,570 --> 00:15:54,470 que puede mantener el pool 429 00:15:54,470 --> 00:15:55,129 ¿vale? 430 00:15:56,230 --> 00:15:58,470 entonces, hombre, ¿hacéis multi-hilo 431 00:15:58,470 --> 00:15:59,350 de más de 10 hilos? 432 00:16:01,409 --> 00:16:02,149 no, ¿verdad? 433 00:16:02,450 --> 00:16:04,250 o sea, yo creo que un programa de más de 10 hilos 434 00:16:04,250 --> 00:16:05,470 ¿no es mucho hilo eso? 435 00:16:06,450 --> 00:16:08,350 no, no es mucho hilo, ¿no? bueno, sí, claro 436 00:16:08,350 --> 00:16:09,950 depende de lo que estés gestionando 437 00:16:09,950 --> 00:16:16,830 Bueno, pues el tamaño máximo de conexiones 438 00:16:16,830 --> 00:16:18,529 El pool 439 00:16:18,529 --> 00:16:20,070 Se reserva siempre 440 00:16:20,070 --> 00:16:22,309 Unas cuantas vacías sin usar 441 00:16:22,309 --> 00:16:24,970 Pues para ir rápido 442 00:16:24,970 --> 00:16:26,409 ¿Significa que pone más de 10? 443 00:16:26,929 --> 00:16:27,750 ¿O que tú le pones 10? 444 00:16:27,750 --> 00:16:29,509 No, no, no, eso me refiero a este parámetro 445 00:16:29,509 --> 00:16:31,269 Entonces él se las va apañando 446 00:16:31,269 --> 00:16:32,870 Para tener siempre dos disponibles 447 00:16:32,870 --> 00:16:34,629 Por si te llega un hilo, punto, y estas dos 448 00:16:34,629 --> 00:16:36,629 Y ahora me cree otra y me la mantengo ahí disponible 449 00:16:36,629 --> 00:16:37,750 Pero el pool es para abanacar los datos 450 00:16:37,750 --> 00:16:40,250 para abrir varias conexiones simultáneas 451 00:16:40,250 --> 00:16:42,490 Pool es una clase que está ahí preocupándose 452 00:16:42,490 --> 00:16:44,309 de tener unas cuantas conexiones 453 00:16:44,309 --> 00:16:46,330 ahí creadas, irlas entregando 454 00:16:46,330 --> 00:16:48,029 a quien le pide, irlas cerrando 455 00:16:48,029 --> 00:16:49,070 cuando haga falta, etc. 456 00:16:49,950 --> 00:16:52,110 Esto es el tiempo máximo que va a estar 457 00:16:52,110 --> 00:16:53,929 esperando el pool a hacer una conexión 458 00:16:53,929 --> 00:16:55,850 Si pasan 30 segundos 459 00:16:55,850 --> 00:16:58,110 y una conexión no la ha respondido, te da 460 00:16:58,110 --> 00:16:59,889 otra del pool, te da otra y ya está 461 00:16:59,889 --> 00:17:01,929 Si no tenemos un pool, tenemos que 462 00:17:01,929 --> 00:17:03,370 gestionar el time aún nosotros 463 00:17:03,370 --> 00:17:05,670 y si no me llega, pues me va a salir un exception 464 00:17:05,670 --> 00:17:07,089 a menos que capture la exception 465 00:17:07,089 --> 00:17:09,710 exception time out 466 00:17:09,710 --> 00:17:11,730 no sé qué, la capturo y la hago otra vez 467 00:17:11,730 --> 00:17:13,190 sería un rollo, pues él te 468 00:17:13,190 --> 00:17:15,829 gestiona eso, te da otra 469 00:17:15,829 --> 00:17:17,950 y se acabó, pero bueno 470 00:17:17,950 --> 00:17:19,950 un pool, usaríamos un 471 00:17:19,950 --> 00:17:21,190 pool en una aplicación 472 00:17:21,190 --> 00:17:23,390 monohilo, bueno 473 00:17:23,390 --> 00:17:25,670 porque metemos aquí a este tío 474 00:17:25,670 --> 00:17:27,670 que está ahí metiendo o dando 475 00:17:27,670 --> 00:17:29,390 guerra, vale 476 00:17:29,390 --> 00:17:31,450 entonces, ahora 477 00:17:31,450 --> 00:17:32,549 si nosotros 478 00:17:32,549 --> 00:17:34,789 queremos aquí 479 00:17:34,789 --> 00:17:39,750 Ah, es verdad, la dependencia 480 00:17:39,750 --> 00:17:41,950 La dependencia de Ikari 481 00:17:41,950 --> 00:17:43,309 Esta, si la buscas tú 482 00:17:43,309 --> 00:17:45,769 En el repositorio de Maven 483 00:17:45,769 --> 00:17:47,710 Te va a salir algo como esto 484 00:17:47,710 --> 00:17:49,750 La puedes buscar 485 00:17:49,750 --> 00:17:50,990 Y te sale esto 486 00:17:50,990 --> 00:17:56,329 Te sale esto u otra versión, pero vamos 487 00:17:56,329 --> 00:17:57,630 Te saldrá algo como esto 488 00:17:57,630 --> 00:17:59,329 Vamos a probar 489 00:17:59,329 --> 00:18:04,470 Bueno, a ver, se lo he preguntado a HGPT 490 00:18:04,470 --> 00:18:06,390 Pero si lo buscáramos en el repositorio 491 00:18:06,390 --> 00:18:08,990 Bueno, vamos a pedirlo 492 00:18:08,990 --> 00:18:10,490 Sí, vamos a buscar el repositorio 493 00:18:10,490 --> 00:18:11,410 Que siempre es 494 00:18:11,410 --> 00:18:13,890 Joder, que no he puesto el repositorio 495 00:18:13,890 --> 00:18:14,470 Aquí está 496 00:18:14,470 --> 00:18:16,630 Vale, si ponemos aquí 497 00:18:16,630 --> 00:18:18,410 Icari 498 00:18:18,410 --> 00:18:20,029 CP 499 00:18:20,029 --> 00:18:21,269 Pues 500 00:18:21,269 --> 00:18:24,049 Me sale 501 00:18:24,049 --> 00:18:25,150 Esta cosa 502 00:18:25,150 --> 00:18:28,480 Y esta cosa 503 00:18:28,480 --> 00:18:32,599 Que esta sí que es la última versión 504 00:18:32,599 --> 00:18:35,400 Pues venga, 702 505 00:18:35,400 --> 00:18:36,160 Cogemos 506 00:18:36,160 --> 00:18:39,000 Porque la que me había dado chat GPT 507 00:18:39,000 --> 00:18:40,480 era 510 508 00:18:40,480 --> 00:18:45,119 venga, pues vamos a dejarle esta 509 00:18:45,119 --> 00:18:46,859 yo que sé 510 00:18:46,859 --> 00:18:48,460 por probar 511 00:18:48,460 --> 00:18:50,099 si es que esto funciona o no funciona 512 00:18:50,099 --> 00:18:51,380 pues yo que sé, ya veremos 513 00:18:51,380 --> 00:18:54,359 como Christian se ha dormido, pues se lo perderá 514 00:18:54,359 --> 00:18:58,950 vale, pues entonces 515 00:18:58,950 --> 00:19:01,890 vamos ahora a nuestra implementación 516 00:19:01,890 --> 00:19:02,670 esta de aquí 517 00:19:02,670 --> 00:19:07,430 claro, ahora ya 518 00:19:07,430 --> 00:19:13,470 este 519 00:19:13,470 --> 00:19:15,910 venta dao implementación 520 00:19:15,910 --> 00:19:17,769 cuando lo 521 00:19:17,769 --> 00:19:19,309 insertamos desde el 522 00:19:19,309 --> 00:19:20,569 venta service 523 00:19:20,569 --> 00:19:25,170 desde el 524 00:19:25,170 --> 00:19:26,329 venta dao 525 00:19:26,329 --> 00:19:30,069 y ahora 526 00:19:30,069 --> 00:19:31,349 venta dao 527 00:19:31,349 --> 00:19:35,390 ya me he perdido 528 00:19:35,390 --> 00:19:37,009 ¿dónde estamos? 529 00:19:37,890 --> 00:19:39,349 sí, sí, me he perdido, me he encontrado yo 530 00:19:39,349 --> 00:19:42,369 que tenemos un día 531 00:19:42,369 --> 00:19:44,250 hoy espeso, a ver 532 00:19:44,250 --> 00:19:46,230 vale 533 00:19:46,230 --> 00:19:47,789 aquí era donde 534 00:19:47,789 --> 00:19:50,230 hemos cogido la 535 00:19:50,230 --> 00:19:51,369 conexión 536 00:19:51,369 --> 00:19:54,589 vale, cuando hemos hecho el venta de implementación 537 00:19:54,589 --> 00:19:55,250 hemos cogido 538 00:19:55,250 --> 00:19:58,430 pues podemos ahora en lugar 539 00:19:58,430 --> 00:20:00,309 de pasarle, esta era la versión 540 00:20:00,309 --> 00:20:02,529 cuando le pasábamos una única 541 00:20:02,529 --> 00:20:04,490 conexión del principio sin pool 542 00:20:04,490 --> 00:20:06,130 y sin nada, vale 543 00:20:06,130 --> 00:20:07,970 que le quiero yo decir, oye no 544 00:20:07,970 --> 00:20:09,950 Esta aplicación es multi-hilo, este main 545 00:20:09,950 --> 00:20:12,170 Esto en lugar de un main será un hilo 546 00:20:12,170 --> 00:20:13,150 Que esté por ahí de algún lado 547 00:20:13,150 --> 00:20:16,690 Pues quiero, cógete una conexión de la piscina 548 00:20:16,690 --> 00:20:18,190 No te cojas la única 549 00:20:18,190 --> 00:20:18,829 Y madre 550 00:20:18,829 --> 00:20:20,750 Pues entonces 551 00:20:20,750 --> 00:20:24,549 Esto no, lo cargamos no 552 00:20:24,549 --> 00:20:31,319 Vale, pues 553 00:20:31,319 --> 00:20:32,259 Aquí 554 00:20:32,259 --> 00:20:44,319 Haríamos, oye hazme un ventadao 555 00:20:44,319 --> 00:20:46,339 Pero la conexión 556 00:20:46,339 --> 00:20:47,859 Que me tienes que crear, que sea 557 00:20:47,859 --> 00:20:49,539 Conexión.getpool 558 00:20:49,539 --> 00:20:52,400 Y la piscina esta tendrá algún método 559 00:20:52,400 --> 00:20:53,859 Para regalarte una 560 00:20:53,859 --> 00:20:56,160 GetPool 561 00:20:56,160 --> 00:20:58,119 Me da el data source y este me da 562 00:20:58,119 --> 00:20:59,460 La conexión 563 00:20:59,460 --> 00:21:02,240 Me da una conexión 564 00:21:02,240 --> 00:21:03,380 Para esa piscinilla 565 00:21:03,380 --> 00:21:05,740 Vale 566 00:21:05,740 --> 00:21:08,019 GetConnection 567 00:21:08,019 --> 00:21:08,799 Es como antes 568 00:21:08,799 --> 00:21:14,160 O sea, esto me da el pool 569 00:21:14,160 --> 00:21:15,920 Y esta ya me da una de esas 570 00:21:15,920 --> 00:21:16,819 Una de las que haya 571 00:21:16,819 --> 00:21:20,000 Me da una de las que haya 572 00:21:20,000 --> 00:21:20,619 Y ya está 573 00:21:20,619 --> 00:21:25,220 Que efectivamente tengo que capturarlo 574 00:21:25,220 --> 00:21:34,509 Pero no pasa nada 575 00:21:34,509 --> 00:21:36,930 Lo capturo y se acabó 576 00:21:36,930 --> 00:21:43,160 Vale, ya está 577 00:21:43,160 --> 00:21:44,279 A ver si funciona 578 00:21:44,279 --> 00:21:47,119 Hemos cambiado en lugar de una única conexión 579 00:21:47,119 --> 00:21:48,700 A una conexión del pool 580 00:21:48,700 --> 00:21:51,140 ¿Va a seguir insertando 581 00:21:51,140 --> 00:21:52,640 Un bicho de estos? 582 00:21:52,819 --> 00:21:53,359 Pues no sé 583 00:21:53,359 --> 00:21:57,119 Debería si hemos configurado bien el pool 584 00:21:57,119 --> 00:21:58,940 Y la dependencia es buena y todo eso 585 00:21:58,940 --> 00:21:59,599 Que no lo sé 586 00:21:59,599 --> 00:22:02,420 no lo sé, yo creo que no, creo que nos faltan 587 00:22:02,420 --> 00:22:04,500 cosas, creo que nos faltan 588 00:22:04,500 --> 00:22:06,299 cosas, entonces lo bonito es 589 00:22:06,299 --> 00:22:08,359 averiguarlo, vale 590 00:22:08,359 --> 00:22:09,980 esto es lo que yo me esperaba 591 00:22:09,980 --> 00:22:13,740 esa dependencia de Icari 592 00:22:13,740 --> 00:22:16,180 usa logs 593 00:22:16,180 --> 00:22:18,339 y no tiene logger 594 00:22:18,339 --> 00:22:20,420 no tiene logger, pues hay que ponerle 595 00:22:20,420 --> 00:22:22,440 una dependencia de log 596 00:22:22,440 --> 00:22:23,259 entonces 597 00:22:23,259 --> 00:22:26,319 ¿cuál es una que yo he verificado que 598 00:22:26,319 --> 00:22:28,339 funciona? pues la tengo 599 00:22:28,339 --> 00:22:30,880 Por aquí arriba 600 00:22:30,880 --> 00:22:34,960 Esta 601 00:22:34,960 --> 00:22:38,140 La copio y la copiáis 602 00:22:38,140 --> 00:22:40,160 Es una herramienta de log 603 00:22:40,160 --> 00:22:42,259 Para que funcione bien con el zucker 604 00:22:42,259 --> 00:22:43,700 Este o como se llame 605 00:22:43,700 --> 00:22:47,740 Y ya eso es lo último que vais a copiar hoy 606 00:22:47,740 --> 00:23:00,200 Ahora 607 00:23:00,200 --> 00:23:03,480 Si salen errores ya no los espero 608 00:23:03,480 --> 00:23:06,819 Pues mal rollo 609 00:23:06,819 --> 00:23:08,059 Porque nos tenemos que ir 610 00:23:08,059 --> 00:23:09,960 Vamos a ver 611 00:23:09,960 --> 00:23:15,180 Sí, pero ya me estáis dando miedo 612 00:23:15,180 --> 00:23:16,440 Porque me estáis diciendo que no funciona 613 00:23:16,440 --> 00:23:19,259 Así que vamos a ver 614 00:23:19,259 --> 00:23:23,220 Ya, pero es que me habéis dado mucha inquietud 615 00:23:23,220 --> 00:23:25,519 Oye, me ha funcionado perfectamente 616 00:23:25,519 --> 00:23:28,019 Este es el log que le faltaba 617 00:23:28,019 --> 00:23:29,839 Pongo otra vez el 618 00:23:29,839 --> 00:23:41,000 ¿Tú le has puesto el root 1, 2, 3, 4? 619 00:23:41,359 --> 00:23:42,319 ¿Cuándo lo has configurado? 620 00:23:50,650 --> 00:23:51,849 Sí funciona, ¿verdad? 621 00:23:52,910 --> 00:23:55,349 Y lo ha insertado aquí 622 00:23:55,349 --> 00:23:57,369 Ahí tengo todo 623 00:23:57,369 --> 00:24:05,529 Pues 624 00:24:05,529 --> 00:24:10,170 Qué bien y qué chulo 625 00:24:10,170 --> 00:24:19,269 ¿No le estarás dando el usuario y la contraseña correctas? 626 00:24:23,950 --> 00:24:25,609 Si nos vamos a este 627 00:24:25,609 --> 00:24:26,730 Esto ya está copiado, ¿no? 628 00:24:27,670 --> 00:24:29,289 Si nos vamos a este DAO 629 00:24:29,289 --> 00:24:31,490 el insert venta 630 00:24:31,490 --> 00:24:33,509 que bien, que estupendo 631 00:24:33,509 --> 00:24:35,430 pero y el 632 00:24:35,430 --> 00:24:36,289 find by id 633 00:24:36,289 --> 00:24:39,309 pues hombre vamos a hacer por lo menos 634 00:24:39,309 --> 00:24:41,349 el find by id este de aquí 635 00:24:41,349 --> 00:24:45,160 y luego 636 00:24:45,160 --> 00:24:46,859 ya os quedáis 637 00:24:46,859 --> 00:24:48,539 haciendo vosotros para el próximo día 638 00:24:48,539 --> 00:24:50,740 el find all y el delete 639 00:24:50,740 --> 00:24:52,680 porque el delete sería una sentencia con 640 00:24:52,680 --> 00:24:54,740 sqt udat y este sería también 641 00:24:54,740 --> 00:24:56,339 una select, pero otro tipo de select 642 00:24:56,339 --> 00:24:58,619 vamos a hacer el find by id este 643 00:24:58,619 --> 00:25:02,000 Pues es que es copiar y pegar todo 644 00:25:02,000 --> 00:25:03,440 Pero cambiar la sentencia 645 00:25:03,440 --> 00:25:05,039 Y luego aquí recoger el resultado 646 00:25:05,039 --> 00:25:07,619 Vamos a copiar y pegar todo esto 647 00:25:07,619 --> 00:25:11,640 Pues 648 00:25:11,640 --> 00:25:14,660 El resto, los dos métodos del DAO 649 00:25:14,660 --> 00:25:15,539 Que se quedan sin hacer 650 00:25:15,539 --> 00:25:18,059 El find all y el delete event 651 00:25:18,059 --> 00:25:19,220 Este es interesante 652 00:25:19,220 --> 00:25:21,920 Porque aquí tenéis que reconstruir 653 00:25:21,920 --> 00:25:23,160 Toda la lista de objetos 654 00:25:23,160 --> 00:25:26,059 Bueno, ya el de arriba va a ser interesante 655 00:25:26,059 --> 00:25:27,900 A ver, callaos un rato 656 00:25:27,900 --> 00:25:29,039 Vamos a hacer el 657 00:25:29,039 --> 00:25:31,579 Vamos a hacer este 658 00:25:31,579 --> 00:25:34,059 Y cuando hagamos este ya entenderéis lo que tenéis que hacer vosotros 659 00:25:34,059 --> 00:25:35,099 ¿Verdad que sí? 660 00:25:36,160 --> 00:25:37,619 Vale, pues entonces hemos dicho 661 00:25:37,619 --> 00:25:39,059 Find by id 662 00:25:39,059 --> 00:25:40,740 Vamos a copiar y pegar el de arriba 663 00:25:40,740 --> 00:25:42,460 Y cambiamos la sentencia 664 00:25:42,460 --> 00:25:44,359 Tirando 665 00:25:44,359 --> 00:25:47,880 Vale, pues find by id 666 00:25:47,880 --> 00:25:50,200 Ahora, nuestra sentencia ahora no va a ser 667 00:25:50,200 --> 00:25:52,319 Insering to ventas, bla bla bla 668 00:25:52,319 --> 00:25:54,140 Nuestra sentencia 669 00:25:54,140 --> 00:25:56,119 Ahora va a ser todo fuera 670 00:25:56,119 --> 00:25:58,759 Y ahora va a ser 671 00:25:58,759 --> 00:26:00,339 Select 672 00:26:00,339 --> 00:26:02,960 asterisco 673 00:26:02,960 --> 00:26:05,140 ¿por qué asterisco? 674 00:26:05,220 --> 00:26:06,640 porque quiero todos los campos 675 00:26:06,640 --> 00:26:08,799 porque voy a construir luego un objeto venta 676 00:26:08,799 --> 00:26:10,599 seled asterisco 677 00:26:10,599 --> 00:26:11,660 from 678 00:26:11,660 --> 00:26:13,759 ventas 679 00:26:13,759 --> 00:26:17,279 where 680 00:26:17,279 --> 00:26:22,009 id 681 00:26:22,009 --> 00:26:23,750 igual a 682 00:26:23,750 --> 00:26:26,410 y aquí ya sí que me toca romper la cosa 683 00:26:26,410 --> 00:26:28,349 esta y concatenarlo 684 00:26:28,930 --> 00:26:29,549 con 685 00:26:29,549 --> 00:26:31,009 id 686 00:26:31,009 --> 00:26:33,450 id es un número 687 00:26:33,450 --> 00:26:36,289 afortunadamente, así que no tengo que poner las comillas 688 00:26:36,289 --> 00:26:36,809 simples 689 00:26:36,809 --> 00:26:40,210 aquí, de nuevo, esto 690 00:26:40,210 --> 00:26:42,009 lo cambiamos el próximo día 691 00:26:42,009 --> 00:26:44,390 para hacerlo con una sentencia precompilada 692 00:26:44,390 --> 00:26:46,509 y que nos haga inyección, pero bueno, eso es un detallito 693 00:26:46,509 --> 00:26:48,369 vale, ya tenemos el SELECT 694 00:26:48,369 --> 00:26:50,069 ahora, el SELECT 695 00:26:50,069 --> 00:26:51,490 se ejecutaría con 696 00:26:51,490 --> 00:26:53,930 execute query 697 00:26:53,930 --> 00:27:02,750 exacto, SQL 698 00:27:02,750 --> 00:27:04,769 pero claro, este me devuelve 699 00:27:04,769 --> 00:27:06,970 toda una lista de registros, bueno, uno en este 700 00:27:06,970 --> 00:27:08,609 caso, pero bueno, registros 701 00:27:08,609 --> 00:27:10,990 En este caso uno porque hay de esclave primaria 702 00:27:10,990 --> 00:27:12,970 Pero él me lo mete en una caja de registros 703 00:27:12,970 --> 00:27:15,069 La caja de registros 704 00:27:15,069 --> 00:27:16,529 ¿Cómo se llamaba? 705 00:27:16,769 --> 00:27:18,869 La caja de registros 706 00:27:18,869 --> 00:27:21,230 Se llama result set 707 00:27:21,230 --> 00:27:30,759 Esta es la caja de registros 708 00:27:30,759 --> 00:27:31,920 Result set 709 00:27:31,920 --> 00:27:34,400 De javasql 710 00:27:34,400 --> 00:27:35,859 Y ahora 711 00:27:35,859 --> 00:27:38,619 Tendré que sacar los tres apartaditos 712 00:27:38,619 --> 00:27:39,480 De esa caja 713 00:27:39,480 --> 00:27:42,299 Para construir con ellos el objeto venta 714 00:27:42,299 --> 00:27:43,180 Que voy a devolver 715 00:27:43,180 --> 00:27:47,920 Ahora, ahora, ahora 716 00:27:47,920 --> 00:27:48,480 Lo vemos 717 00:27:48,480 --> 00:27:50,980 Ese es el objeto venta que vamos a devolver 718 00:27:50,980 --> 00:27:51,980 ¿Vale? 719 00:27:52,059 --> 00:27:52,640 Retun V 720 00:27:52,640 --> 00:27:55,940 Ese es el objeto venta a devolver 721 00:27:55,940 --> 00:27:57,700 Y ahora vamos a construirlo 722 00:27:57,700 --> 00:27:59,420 Vamos a recorrer el ResultSet 723 00:27:59,420 --> 00:28:01,220 A ver, lo voy a hacer a toda leche 724 00:28:01,220 --> 00:28:03,380 Porque nos vamos a ir 725 00:28:03,380 --> 00:28:04,940 En 5 minutos 726 00:28:04,940 --> 00:28:08,900 Pero no os preocupéis que vamos a volver sobre ello 727 00:28:08,900 --> 00:28:10,660 Mientras 728 00:28:10,660 --> 00:28:15,400 esta es mi caja de registros 729 00:28:15,400 --> 00:28:17,180 de todas formas, si hicisteis el trabajo el año pasado 730 00:28:17,180 --> 00:28:18,640 todo esto será familiar 731 00:28:18,640 --> 00:28:21,460 ah, que se llama registros 732 00:28:21,460 --> 00:28:24,789 perdón, vale 733 00:28:24,789 --> 00:28:26,730 mi caja de registros 734 00:28:26,730 --> 00:28:28,430 tiene un posicionador 735 00:28:28,430 --> 00:28:31,190 que empieza posicionado antes del 736 00:28:31,190 --> 00:28:33,109 primero, cada vez que hago 737 00:28:33,109 --> 00:28:34,569 un next, avanza 738 00:28:34,569 --> 00:28:37,109 pues un bucle y además devuelvo boolean 739 00:28:37,109 --> 00:28:38,950 para decir si hay o no hay 740 00:28:38,950 --> 00:28:41,309 entonces, pues yo voy avanzando 741 00:28:41,309 --> 00:28:42,589 este well se va a hacer una vez solo 742 00:28:42,589 --> 00:28:44,809 porque si la clave es id y es primaria 743 00:28:44,809 --> 00:28:46,490 se va a hacer una vez o ninguna 744 00:28:46,490 --> 00:28:48,670 porque podría ya dar yo una id que no está 745 00:28:48,670 --> 00:28:50,710 y ahora, ¿cómo saco los datos? 746 00:28:51,309 --> 00:28:52,190 pues venga, el id 747 00:28:52,190 --> 00:28:53,589 que es ínteger 748 00:28:53,589 --> 00:28:56,569 bueno, ni siquiera hace falta, directamente os voy a poner en v 749 00:28:56,569 --> 00:28:58,690 v.set 750 00:28:58,690 --> 00:28:59,549 id 751 00:28:59,549 --> 00:29:01,549 ¿cómo saco el id? 752 00:29:02,089 --> 00:29:03,470 pues de registros 753 00:29:03,470 --> 00:29:06,230 que ahora estoy posicionada en mi cajita 754 00:29:06,230 --> 00:29:07,190 en la primera 755 00:29:07,190 --> 00:29:09,930 registros.get 756 00:29:09,930 --> 00:29:12,630 Int, porque es el campo entero 757 00:29:12,630 --> 00:29:13,470 Nombre del campo 758 00:29:13,470 --> 00:29:15,009 Que se llama id, ¿verdad? 759 00:29:16,609 --> 00:29:18,049 Ahora, siguiente 760 00:29:18,049 --> 00:29:19,910 V.set 761 00:29:19,910 --> 00:29:21,829 Set coche, perdón 762 00:29:21,829 --> 00:29:24,230 De registros 763 00:29:24,230 --> 00:29:26,210 Sácame un 764 00:29:26,210 --> 00:29:28,589 String que sea 765 00:29:28,589 --> 00:29:29,990 Coche 766 00:29:29,990 --> 00:29:32,130 Se llama coche, ¿verdad? 767 00:29:32,250 --> 00:29:33,130 En mi, el campo 768 00:29:33,130 --> 00:29:37,900 Claro, que lo... 769 00:29:37,900 --> 00:29:38,640 Color 770 00:29:38,640 --> 00:29:41,579 Pues sácame 771 00:29:41,579 --> 00:29:44,180 el campito color 772 00:29:44,180 --> 00:29:53,549 lo hicisteis todos 773 00:29:53,549 --> 00:29:54,289 y ahora 774 00:29:54,289 --> 00:29:57,049 ¿puedo confesaros algo? 775 00:29:58,650 --> 00:29:59,990 no miramos casi 776 00:29:59,990 --> 00:30:03,289 lo siento, no teníamos tiempo 777 00:30:03,289 --> 00:30:04,690 era un agobio el copón 778 00:30:04,690 --> 00:30:07,109 pero al menos aprendisteis haciéndolo 779 00:30:07,109 --> 00:30:07,450 ¿a que sí? 780 00:30:07,450 --> 00:30:09,589 sí, los que miren clase 781 00:30:09,589 --> 00:30:10,470 que algunos miren clase 782 00:30:10,470 --> 00:30:11,789 pero los que me llevé para 783 00:30:11,789 --> 00:30:12,849 los que estaban a la virtual 784 00:30:12,849 --> 00:30:16,069 ¿y por qué te lo marcan amarillo? 785 00:30:16,349 --> 00:30:18,769 Porque está sin usar todavía 786 00:30:18,769 --> 00:30:21,130 Registros 787 00:30:21,130 --> 00:30:22,750 Ah, no lo sé 788 00:30:22,750 --> 00:30:25,910 Registros.getString 789 00:30:25,910 --> 00:30:27,250 Nif, barra baja 790 00:30:27,250 --> 00:30:28,190 Comprador, ¿verdad? 791 00:30:33,240 --> 00:30:34,740 Pues ya tenemos 792 00:30:34,740 --> 00:30:36,759 Entonces 793 00:30:36,759 --> 00:30:39,220 Si hubiera más while 794 00:30:39,220 --> 00:30:40,660 O sea, si hubiera más registros 795 00:30:40,660 --> 00:30:42,460 Estaría pisando todo el rato el mismo 796 00:30:42,460 --> 00:30:43,240 Pero no es el caso 797 00:30:43,240 --> 00:30:44,980 Porque de haber ahí solo uno 798 00:30:44,980 --> 00:30:48,059 Y si no hay ninguno, la caja ResultSet está vacía 799 00:30:48,059 --> 00:30:49,259 Con lo cual no entro en el while 800 00:30:49,259 --> 00:30:51,359 y me va a devolver null, que tiene sentido 801 00:30:51,359 --> 00:30:52,559 que me devuelva null si no hay 802 00:30:52,559 --> 00:30:55,160 entonces, ahora 803 00:30:55,160 --> 00:30:58,160 null pointer access 804 00:30:58,160 --> 00:30:59,619 ah, claro, porque no he hecho el new 805 00:30:59,619 --> 00:31:01,759 venta, por Dios 806 00:31:01,759 --> 00:31:05,599 bueno, es que el new venta no lo voy a hacer aquí, porque quiero que me 807 00:31:05,599 --> 00:31:07,359 devuelva null si no hay campos 808 00:31:07,359 --> 00:31:09,180 entonces el new venta lo hago aquí 809 00:31:09,180 --> 00:31:11,400 venta 810 00:31:11,400 --> 00:31:13,160 v igual a new 811 00:31:13,160 --> 00:31:14,420 venta 812 00:31:14,420 --> 00:31:17,640 sí, perdón 813 00:31:17,640 --> 00:31:19,359 es v directamente, claro 814 00:31:19,359 --> 00:31:21,819 v igual a 90, lo fijo 815 00:31:21,819 --> 00:31:23,900 devuelvo v y ya tengo 816 00:31:23,900 --> 00:31:24,680 el find by id 817 00:31:24,680 --> 00:31:27,400 a ver, es un rollo 818 00:31:27,400 --> 00:31:29,420 porque he tenido que hacer a mano 819 00:31:29,420 --> 00:31:31,980 el famoso 820 00:31:31,980 --> 00:31:34,079 mapeo objeto relacional 821 00:31:34,079 --> 00:31:35,039 que es 822 00:31:35,039 --> 00:31:37,000 yo tengo campos de tablas 823 00:31:37,000 --> 00:31:39,660 y he tenido que convertirlos 824 00:31:39,660 --> 00:31:41,200 a propiedades de objetos 825 00:31:41,200 --> 00:31:43,539 lo he tenido que hacer a mano, que pereza 826 00:31:43,539 --> 00:31:45,000 pero como somos tan vagos 827 00:31:45,000 --> 00:31:47,539 pues claro, al final siempre hay una 828 00:31:47,539 --> 00:31:49,839 capa que te lo hace. Ese mapeo. 829 00:31:52,740 --> 00:31:53,839 Vamos a ejecutarlo 830 00:31:53,839 --> 00:31:55,940 y si funciona nos vamos ya con mucha satisfacción. 831 00:31:58,940 --> 00:31:59,299 Debería. 832 00:31:59,539 --> 00:32:01,039 Si no funciona, no sé por qué será. 833 00:32:01,819 --> 00:32:03,720 Venga, ventas service. Pues vámonos 834 00:32:03,720 --> 00:32:05,599 aquí. Este dame datos que no vale para nada, lo vamos a 835 00:32:05,599 --> 00:32:05,839 quitar. 836 00:32:07,339 --> 00:32:09,559 Y vamos a dejar de insertar ventas, porque 837 00:32:09,559 --> 00:32:11,440 es que estamos aquí insertando una venta tras otra 838 00:32:11,440 --> 00:32:13,640 todo el rato. Me hago mi ventas 839 00:32:13,640 --> 00:32:16,059 service y ahora voy a mostrar 840 00:32:16,059 --> 00:32:22,349 service.find 841 00:32:22,349 --> 00:32:25,049 Ah, bueno, que es que no me he hecho el servicio 842 00:32:25,049 --> 00:32:27,470 Tranquilos, no os pongáis nerviosos 843 00:32:27,470 --> 00:32:29,109 Nos falta el servicio 844 00:32:29,109 --> 00:32:30,369 Que el servicio sería 845 00:32:30,369 --> 00:32:33,450 public venta 846 00:32:33,450 --> 00:32:36,109 get venta 847 00:32:36,109 --> 00:32:37,130 por ejemplo 848 00:32:37,130 --> 00:32:39,970 get venta integer id 849 00:32:39,970 --> 00:32:44,230 Y ahora, este que me devolvería 850 00:32:44,230 --> 00:32:45,970 este me devolvería 851 00:32:45,970 --> 00:32:49,950 dao.findbyid 852 00:32:49,950 --> 00:32:52,309 ala 853 00:32:52,309 --> 00:32:55,210 ya tengo el servicio hecho 854 00:32:55,210 --> 00:32:57,130 que tira del dao 855 00:32:57,130 --> 00:32:59,089 ahora me voy a mi 856 00:32:59,089 --> 00:33:00,490 main que estaba aquí 857 00:33:00,490 --> 00:33:03,009 y ahora service.get 858 00:33:03,009 --> 00:33:04,990 venta 859 00:33:04,990 --> 00:33:06,630 vamos a el 1 860 00:33:06,630 --> 00:33:09,089 venta 861 00:33:09,089 --> 00:33:11,109 voy a hacerle un siso rápido a 862 00:33:11,109 --> 00:33:12,670 venta para que 863 00:33:12,670 --> 00:33:14,369 me muestre algo interesante 864 00:33:14,369 --> 00:33:17,269 venta, le hacemos 865 00:33:17,269 --> 00:33:18,930 un to stream, perdón 866 00:33:18,930 --> 00:33:21,109 si es un to stream rápido 867 00:33:21,109 --> 00:33:26,190 un to stream rápido 868 00:33:26,190 --> 00:33:28,349 y ahora ya si 869 00:33:28,349 --> 00:33:29,650 vamos a ver si 870 00:33:29,650 --> 00:33:32,490 el servicio me saca la venta 871 00:33:32,490 --> 00:33:32,970 con uno 872 00:33:32,970 --> 00:33:36,569 si no lo hace, pues nos viene fatal 873 00:33:36,569 --> 00:33:42,259 bien, magnífico 874 00:33:42,259 --> 00:33:43,660 vale, aquí nos ha sacado 875 00:33:43,660 --> 00:33:44,920 toda la venta 876 00:33:44,920 --> 00:33:50,569 vale, pues aquí 877 00:33:50,569 --> 00:33:52,309 aunque no os guste y os resistís 878 00:33:52,309 --> 00:33:56,670 la clase principal 879 00:33:56,670 --> 00:33:58,150 que puede ser el 880 00:33:58,150 --> 00:34:00,089 serlet, puede ser lo que sea, aquí como es una 881 00:34:00,089 --> 00:34:01,650 aplicación de escritorio es el main 882 00:34:01,650 --> 00:34:04,609 pues se queda muy limpio, crea un servicio 883 00:34:04,609 --> 00:34:06,109 y el servicio me dice 884 00:34:06,109 --> 00:34:07,950 estos son los servicios que te doy 885 00:34:07,950 --> 00:34:10,050 te doy el servicio de crear un usuario 886 00:34:10,050 --> 00:34:11,789 te doy el servicio de no sé qué, tú los llamas y ya está 887 00:34:11,789 --> 00:34:14,429 y luego ya las complejidades se van metiendo 888 00:34:14,429 --> 00:34:15,630 pues 889 00:34:15,630 --> 00:34:17,570 en sus capitas 890 00:34:17,570 --> 00:34:19,489 pero tú desde tu 891 00:34:19,489 --> 00:34:20,869 desde 892 00:34:20,869 --> 00:34:26,250 tu parte de llamada al servicio 893 00:34:26,250 --> 00:34:31,010 Sí, claro 894 00:34:31,010 --> 00:34:33,849 Entonces, ¿qué sería lo bonito 895 00:34:33,849 --> 00:34:35,710 que hicierais ahora vosotros? 896 00:34:36,190 --> 00:34:37,550 De aquí al martes 897 00:34:37,550 --> 00:34:38,269 No solo 898 00:34:38,269 --> 00:34:41,630 Yo lo pido y yo que sé 899 00:34:41,630 --> 00:34:45,530 Los dos métodos del service que quedan 900 00:34:45,530 --> 00:34:47,670 No, del service no, bueno, del DAO y del service, claro 901 00:34:47,670 --> 00:34:49,250 El find all 902 00:34:49,250 --> 00:34:51,909 tendréis que devolver, este es un select 903 00:34:51,909 --> 00:34:53,929 asterisco, punto pelota 904 00:34:53,929 --> 00:34:55,590 y construir toda la lista 905 00:34:55,590 --> 00:34:57,650 y el borrar 906 00:34:57,650 --> 00:35:00,269 hacer el servicio correspondiente 907 00:35:00,269 --> 00:35:02,170 y probarlo, claro, pero 908 00:35:02,170 --> 00:35:03,730 ¿has venido a 909 00:35:03,730 --> 00:35:05,190 procesos 910 00:35:05,190 --> 00:35:06,849 videojuegos? 911 00:35:07,670 --> 00:35:09,050 pues Estefano ha venido 912 00:35:09,050 --> 00:35:11,949 ¿has venido por un tiempo 913 00:35:11,949 --> 00:35:13,170 con una charla LGTBIQ? 914 00:35:13,889 --> 00:35:15,090 si, además te viene muy bien 915 00:35:15,090 --> 00:35:18,190 mira, alguien que responde 916 00:35:18,190 --> 00:35:19,909 así le viene mucho mejor que a nadie 917 00:35:19,909 --> 00:35:21,730 la charla LGTBIQ 918 00:35:21,730 --> 00:35:24,630 hombre, machista, machirulo 919 00:35:24,630 --> 00:35:25,570 por favor 920 00:35:25,570 --> 00:35:29,329 vale, y no solo eso 921 00:35:29,329 --> 00:35:30,110 me queda bravo 922 00:35:30,110 --> 00:35:31,449 ostras 923 00:35:31,449 --> 00:35:38,840 bueno, no me denuncies 924 00:35:38,840 --> 00:35:42,139 vale 925 00:35:42,139 --> 00:35:45,260 y que sería ya 926 00:35:45,260 --> 00:35:47,000 como seguro que este fin de semana 927 00:35:47,000 --> 00:35:48,380 como no tenéis exámenes 928 00:35:48,380 --> 00:35:51,019 pues yo que sé, ¿os apetece poneros con esto en plan relax? 929 00:35:52,480 --> 00:35:53,059 si hombre 930 00:35:53,059 --> 00:35:55,659 Pues que probéis estos servicios 931 00:35:55,659 --> 00:35:56,840 Que vais a hacer estos dos 932 00:35:56,840 --> 00:35:59,179 En una aplicación web con un servlet 933 00:35:59,179 --> 00:36:01,059 Un formulario 934 00:36:01,059 --> 00:36:03,860 Que pedís los datos 935 00:36:03,860 --> 00:36:05,059 Los dais con un formulario 936 00:36:05,059 --> 00:36:07,900 ¿Y quién se va a conectar a la base de datos? 937 00:36:08,079 --> 00:36:09,300 ¿Quién va a llamar al servicio? 938 00:36:09,880 --> 00:36:11,420 Al servicio no lo va a llamar el main 939 00:36:11,420 --> 00:36:13,679 Al servicio lo va a llamar el servlet 940 00:36:13,679 --> 00:36:15,260 Ni sprint 941 00:36:15,260 --> 00:36:17,659 Ni idems 942 00:36:17,659 --> 00:36:19,480 ¿Eh? 943 00:36:20,820 --> 00:36:22,280 ¿Tenéis el proyecto subido 944 00:36:22,280 --> 00:36:24,719 en el aula virtual, reflejáis la estructura 945 00:36:24,719 --> 00:36:30,199 tenéis que ser los más poderosos 946 00:36:30,199 --> 00:36:33,420 de España que entienden perfectamente la arquitectura de servlets 947 00:36:33,420 --> 00:36:37,820 y por tanto, un servlet es 948 00:36:37,820 --> 00:36:42,320 un programa que se ejecuta en un servidor 949 00:36:42,320 --> 00:36:46,019 de aplicaciones como resultado de una petición 950 00:36:46,019 --> 00:36:50,480 HTTP, eso es un servlet, al igual que esto es una aplicación 951 00:36:50,480 --> 00:36:51,500 que se ejecuta 952 00:36:51,500 --> 00:36:56,579 un servidor, es un trozo de código 953 00:36:56,579 --> 00:36:58,000 un programa, que 954 00:36:58,000 --> 00:37:00,679 lo ejecuta un servidor de aplicaciones 955 00:37:00,679 --> 00:37:01,960 que está en un servidor web 956 00:37:01,960 --> 00:37:04,239 como respuesta a una 957 00:37:04,239 --> 00:37:05,400 petición HTTP 958 00:37:05,400 --> 00:37:07,920 al igual que 959 00:37:07,920 --> 00:37:10,139 un mail, que es un programa 960 00:37:10,139 --> 00:37:12,139 que se ejecuta en un PC 961 00:37:12,139 --> 00:37:13,340 normal y corriente 962 00:37:13,340 --> 00:37:15,440 como respuesta de 963 00:37:15,440 --> 00:37:18,420 la marca 964 00:37:18,420 --> 00:37:18,800 actual 965 00:37:18,800 --> 00:37:21,019 Pues así 966 00:37:21,019 --> 00:37:23,500 Venga, pues ya está 967 00:37:23,500 --> 00:37:25,360 Un momento que pase