1 00:00:00,000 --> 00:00:03,160 Porque no estará el serlet correctamente configurado. 2 00:00:03,419 --> 00:00:06,379 Si tú tienes la anotación web serlet bien puesta, 3 00:00:06,820 --> 00:00:07,980 tiene que llegar a ese serlet. 4 00:00:08,099 --> 00:00:10,259 Otra cosa es que ese serlet no haga nada, como es mi caso. 5 00:00:10,759 --> 00:00:11,640 No hace nada. 6 00:00:12,599 --> 00:00:13,119 ¿Vale? 7 00:00:20,579 --> 00:00:21,100 Vale. 8 00:00:21,519 --> 00:00:25,260 A ver, como lo tenéis hecho, vamos, 9 00:00:26,120 --> 00:00:29,339 el serlet entero, vamos a completarlo. 10 00:00:30,019 --> 00:00:31,859 Que no os va funcionando a algunos. 11 00:00:32,020 --> 00:00:33,960 ya lo arreglaremos, pero es que no quiero que nos paremos 12 00:00:33,960 --> 00:00:35,780 mucho porque si no lo completamos 13 00:00:35,780 --> 00:00:37,579 todo hoy, entonces vamos a 14 00:00:37,579 --> 00:00:39,859 eternizarnos, que es lo que queremos evitar. 15 00:00:40,320 --> 00:00:42,079 Venga, vale, pues ahora 16 00:00:42,079 --> 00:00:43,920 vamos a completar el servlet. 17 00:00:44,340 --> 00:00:45,159 Ahora ya el servlet 18 00:00:45,159 --> 00:00:47,280 instanciará el servicio y todo eso. 19 00:00:47,799 --> 00:00:49,859 Entonces ahora, tened abierto, porque vamos a ir 20 00:00:49,859 --> 00:00:51,039 copiando y pegando de ahí, 21 00:00:51,799 --> 00:00:54,039 tened abierto el servlet que os he pasado. 22 00:00:59,539 --> 00:01:00,539 ¿Qué he metido el qué? 23 00:01:00,539 --> 00:01:02,039 Bueno, hijo, a ver 24 00:01:02,039 --> 00:01:05,040 Espera 25 00:01:05,040 --> 00:01:06,739 A ver, esto lo puedes dejar escrito así 26 00:01:06,739 --> 00:01:08,620 No pasa nada, vamos a irlo completando 27 00:01:08,620 --> 00:01:10,299 Copiando y pegando con lo que hay ahí 28 00:01:10,299 --> 00:01:12,680 Para ir entendiendo lo que hace ese serlet 29 00:01:12,680 --> 00:01:14,840 Entonces, ese serlet es 30 00:01:14,840 --> 00:01:17,959 Debería ser 31 00:01:17,959 --> 00:01:19,920 Este de aquí 32 00:01:19,920 --> 00:01:24,689 Vale, entonces lo primero que os he incluido aquí 33 00:01:24,689 --> 00:01:25,909 Es lo que os he dicho antes 34 00:01:25,909 --> 00:01:27,629 Un serlet por acción, no 35 00:01:27,629 --> 00:01:30,530 Uno por entidad y dentro del distinguir 36 00:01:30,530 --> 00:01:31,349 Uno por entidad 37 00:01:31,349 --> 00:01:36,370 entonces nos vamos a nuestro 38 00:01:36,370 --> 00:01:36,849 serlet 39 00:01:36,849 --> 00:01:39,489 esto lo comentamos ahora 40 00:01:39,489 --> 00:01:43,730 esta es la acción 41 00:01:43,730 --> 00:01:45,829 que la he metido en una acción para comparar 42 00:01:45,829 --> 00:01:47,170 pero da igual, he hecho lo mismo 43 00:01:47,170 --> 00:01:49,629 vale, entonces ahora 44 00:01:49,629 --> 00:01:51,790 si la acción es listar 45 00:01:51,790 --> 00:01:53,890 ¿qué hay que hacer? pues llamará al método 46 00:01:53,890 --> 00:01:55,129 getVentas del servicio 47 00:01:55,129 --> 00:01:57,430 y ya está, y ahora construir la salida 48 00:01:57,430 --> 00:01:59,230 y nada más, pero claro 49 00:01:59,230 --> 00:02:01,670 el servicio tiene que estar instanciado 50 00:02:01,670 --> 00:02:03,510 en algún sitio, bueno pues 51 00:02:03,510 --> 00:02:05,430 el servicio, su sitio para ponerle 52 00:02:05,430 --> 00:02:08,050 es que sea una propiedad 53 00:02:08,050 --> 00:02:09,310 del serlet 54 00:02:09,310 --> 00:02:11,750 que es una propiedad del serlet, pues venga 55 00:02:11,750 --> 00:02:13,629 copiad y pegad, esta de aquí 56 00:02:13,629 --> 00:02:14,569 esto de aquí 57 00:02:14,569 --> 00:02:17,129 lo copiáis y pegáis 58 00:02:17,129 --> 00:02:20,560 y lo ponéis en vuestro 59 00:02:20,560 --> 00:02:21,539 serlet 60 00:02:21,539 --> 00:02:24,620 como propiedad del serlet 61 00:02:24,620 --> 00:02:26,539 vale 62 00:02:26,539 --> 00:02:28,620 ala, este es nuestro 63 00:02:28,620 --> 00:02:30,979 objeto-servicio, que es imprescindible 64 00:02:30,979 --> 00:02:31,939 que exista 65 00:02:31,939 --> 00:02:33,840 para que 66 00:02:33,840 --> 00:02:36,879 el método 67 00:02:36,879 --> 00:02:38,639 do-get y do-post puedan hacer 68 00:02:38,639 --> 00:02:40,860 acciones. ¿Vale? Esto es que se está 69 00:02:40,860 --> 00:02:42,599 recargando todo el rato, que es un coñazo. 70 00:02:43,139 --> 00:02:44,960 ¿Vale? Entonces, esto 71 00:02:44,960 --> 00:02:46,900 lo que nosotros hacemos a mano, es lo 72 00:02:46,900 --> 00:02:48,560 que ese maravilloso Spring que adoráis 73 00:02:48,560 --> 00:02:50,780 se encarga de hacer, crear los 74 00:02:50,780 --> 00:02:52,699 objetos y meterlos para adentro. Ya está. 75 00:02:53,639 --> 00:02:54,900 Mete los objetos para adentro. 76 00:02:55,379 --> 00:02:56,639 O sea, no hace nada más que 77 00:02:56,639 --> 00:02:58,939 llamar dentro a estas cositas 78 00:02:58,939 --> 00:03:01,439 bueno, pues ahora ya 79 00:03:01,439 --> 00:03:03,680 ¿qué queremos hacer si la acción 80 00:03:03,680 --> 00:03:05,560 es lista? pues 81 00:03:05,560 --> 00:03:07,680 si queréis 82 00:03:07,680 --> 00:03:08,900 copiar y pegar 83 00:03:08,900 --> 00:03:11,599 esto que hay dentro de if action 84 00:03:11,599 --> 00:03:12,539 y bueno, primero 85 00:03:12,539 --> 00:03:17,250 copiar esta línea del print writer 86 00:03:17,250 --> 00:03:19,469 que está en el serlet que os he 87 00:03:19,469 --> 00:03:21,090 pasado, porque aquí 88 00:03:21,090 --> 00:03:23,090 esta es 89 00:03:23,090 --> 00:03:25,409 la tubería de salida por la que 90 00:03:25,409 --> 00:03:26,849 el serlet va a mandar el resultado 91 00:03:26,849 --> 00:03:30,229 el serlet una vez que obtenga su resultado 92 00:03:30,229 --> 00:03:32,090 lo va a mandar por su tubería 93 00:03:32,090 --> 00:03:33,289 de salida que es esta 94 00:03:33,289 --> 00:03:35,849 que vamos a sacarla del objeto response 95 00:03:35,849 --> 00:03:38,110 pues vamos a crear primero esa tubería de salida 96 00:03:38,110 --> 00:03:39,129 vamos a sacarla de ahí 97 00:03:39,129 --> 00:03:42,110 pues venga la tubería de salida la copiáis 98 00:03:42,110 --> 00:03:44,009 y la ponéis en vuestro serlet 99 00:03:44,009 --> 00:03:45,409 ala aquí 100 00:03:45,409 --> 00:03:50,639 esa es nuestra tubería de salida 101 00:03:50,639 --> 00:03:52,000 y ahora que tenemos que hacer 102 00:03:52,000 --> 00:03:55,199 pues llamar al servicio para sacar nuestra lista de ventas 103 00:03:55,199 --> 00:03:57,280 pues venga 104 00:03:57,280 --> 00:03:58,599 que es lo que está aquí 105 00:03:58,599 --> 00:04:00,360 Llegamos al servicio 106 00:04:00,360 --> 00:04:02,340 Para sacar nuestra lista de ventas 107 00:04:02,340 --> 00:04:04,860 Y ahora ya construimos la salida 108 00:04:04,860 --> 00:04:06,800 Entonces copiáis esto que está aquí dentro 109 00:04:06,800 --> 00:04:07,560 De este if 110 00:04:07,560 --> 00:04:14,490 Pues lo copiáis aquí 111 00:04:14,490 --> 00:04:26,310 Vale, entonces 112 00:04:26,310 --> 00:04:29,009 El método getVentas del servicio 113 00:04:29,009 --> 00:04:32,959 Que llamará a su vez al del dao 114 00:04:32,959 --> 00:04:34,420 Es 115 00:04:34,420 --> 00:04:36,620 El que yo os pedí que hicierais 116 00:04:36,620 --> 00:04:36,980 ¿Verdad? 117 00:04:38,240 --> 00:04:40,019 Pues vamos a hacerlo rápidamente 118 00:04:40,019 --> 00:04:41,500 Este ya sí que lo vamos a hacer nosotros 119 00:04:41,500 --> 00:04:43,160 Entonces vámonos a la clase servicio 120 00:04:43,160 --> 00:04:46,920 vámonos a nuestra clase servicio 121 00:04:46,920 --> 00:04:49,300 que es, a ver si yo no me meto en el proyecto 122 00:04:49,300 --> 00:04:50,339 malo 123 00:04:50,339 --> 00:04:53,079 vámonos a nuestra clase servicio 124 00:04:53,079 --> 00:04:55,220 que teníamos 125 00:04:55,220 --> 00:04:57,259 ya hecho un crear venta y un get venta 126 00:04:57,259 --> 00:04:58,360 pues vamos a hacer 127 00:04:58,360 --> 00:05:00,240 un 128 00:05:00,240 --> 00:05:01,939 get ventas 129 00:05:01,939 --> 00:05:07,329 un get venta me da una lista de ventas, ¿verdad? 130 00:05:07,910 --> 00:05:12,939 que efectivamente no tiene 131 00:05:12,939 --> 00:05:13,860 parámetros de entrada 132 00:05:13,860 --> 00:05:17,040 porque me da todas las ventas de mi base 133 00:05:17,040 --> 00:05:18,740 de datos, y ahora 134 00:05:18,740 --> 00:05:20,540 ¿Qué me devolverá este? 135 00:05:20,680 --> 00:05:23,220 Pues me devolverá lo que haga el DAO 136 00:05:23,220 --> 00:05:25,079 En su método 137 00:05:25,079 --> 00:05:26,779 Que se supone que tenéis que completar 138 00:05:26,779 --> 00:05:27,339 FindAll 139 00:05:27,339 --> 00:05:32,920 Entonces habrá que hacer 140 00:05:32,920 --> 00:05:35,160 De la implementación correspondiente 141 00:05:35,160 --> 00:05:36,060 Que estamos usando 142 00:05:36,060 --> 00:05:38,560 Habrá que hacer el método FindAll 143 00:05:38,560 --> 00:05:41,079 Para poder hacer GetVentas 144 00:05:41,079 --> 00:05:42,879 O sea GetVentas y aquí ya lo tenemos 145 00:05:42,879 --> 00:05:43,959 ¿Vale? 146 00:05:43,959 --> 00:05:44,459 Aquí 147 00:05:44,459 --> 00:05:47,540 El rojito 148 00:05:47,540 --> 00:05:48,660 Este no sé dónde 149 00:05:48,660 --> 00:05:49,699 pero da igual, vale 150 00:05:49,699 --> 00:05:52,279 bueno, el ventaservice ya está 151 00:05:52,279 --> 00:05:54,180 ahora, vámonos al 152 00:05:54,180 --> 00:05:56,379 dao implementación para hacer ese método 153 00:05:56,379 --> 00:06:02,300 vale 154 00:06:02,300 --> 00:06:06,629 entonces, find all 155 00:06:06,629 --> 00:06:08,790 lo tenéis en blanco 156 00:06:08,790 --> 00:06:11,959 ¿verdad? pues 157 00:06:11,959 --> 00:06:14,019 fuera, todo fuera 158 00:06:14,019 --> 00:06:15,639 todo fuera 159 00:06:15,639 --> 00:06:18,079 vale, esto es lo que se supone, vosotros teníais que 160 00:06:18,079 --> 00:06:20,040 haber hecho ahora, igual que este de aquí 161 00:06:20,040 --> 00:06:21,459 pero 162 00:06:21,459 --> 00:06:24,220 este ya sí que es parte de acceso a datos pura y dura 163 00:06:24,220 --> 00:06:25,980 igual que hicisteis 164 00:06:25,980 --> 00:06:27,740 una sentencia select pero por id 165 00:06:27,740 --> 00:06:29,660 hará un select enterito 166 00:06:29,660 --> 00:06:31,279 un select para todos 167 00:06:31,279 --> 00:06:33,680 pues venga, lo que pasa es que ahora ya 168 00:06:33,680 --> 00:06:35,180 sí que en lugar del objeto statement 169 00:06:35,180 --> 00:06:37,899 vamos a usar el prepare 170 00:06:37,899 --> 00:06:39,699 de statement que no permite 171 00:06:39,699 --> 00:06:41,860 la inyección SQL porque este sí que 172 00:06:41,860 --> 00:06:43,879 lo permite, es una chapuza 173 00:06:43,879 --> 00:06:45,879 metéis ahí un drug database, lo mete 174 00:06:45,879 --> 00:06:47,740 alguien en su formulario bien formado 175 00:06:47,740 --> 00:06:50,019 con un or true o lo que 176 00:06:50,019 --> 00:06:51,620 sea y ahí pasa cualquier cosa 177 00:06:51,620 --> 00:06:53,779 pues venga, vamos a hacer nuestro 178 00:06:53,779 --> 00:06:55,620 find all, ala 179 00:06:55,620 --> 00:07:00,620 nuestro objeto resultante va a ser una lista de ventas que es el que vamos a 180 00:07:00,620 --> 00:07:10,970 devolver inicialmente vacío inicialmente vacío y ahora ya vamos a hacer la 181 00:07:10,970 --> 00:07:14,389 sentencia la sentencia ahora ya no va a ser un 182 00:07:14,389 --> 00:07:19,550 statement normal sino un prepare statement de éste 183 00:07:21,110 --> 00:07:25,930 statement y ahora este se crea a partir de la 184 00:07:25,930 --> 00:07:27,949 conexión y la 185 00:07:27,949 --> 00:07:29,430 conexión la sacamos 186 00:07:29,430 --> 00:07:31,529 ya la tenemos 187 00:07:31,529 --> 00:07:33,709 la conexión es la propiedad 188 00:07:33,709 --> 00:07:36,250 de nuestro da implementación 189 00:07:36,250 --> 00:07:37,810 pues con el método 190 00:07:37,810 --> 00:07:38,850 prepareStatement 191 00:07:38,850 --> 00:07:41,790 y aquí le damos el string 192 00:07:41,790 --> 00:07:43,910 de la consulta, le damos 193 00:07:43,910 --> 00:07:44,529 el string 194 00:07:44,529 --> 00:07:47,850 pero donde le metemos los parámetros 195 00:07:47,850 --> 00:07:49,930 interrogaciones, lo que pasa es que 196 00:07:49,930 --> 00:07:51,689 en este caso, precisamente en este 197 00:07:51,689 --> 00:07:53,050 no necesitamos interrogar parámetros 198 00:07:53,050 --> 00:07:57,019 Escofron ventas 199 00:07:57,019 --> 00:08:01,240 Vale, entonces 200 00:08:01,240 --> 00:08:03,740 Este es un recurso que luego habrá que cerrar 201 00:08:03,740 --> 00:08:05,560 Entonces este recurso 202 00:08:05,560 --> 00:08:06,759 Vamos a meterlo en un try 203 00:08:06,759 --> 00:08:09,720 Con recursos de estos 204 00:08:09,720 --> 00:08:11,800 Y ahora 205 00:08:11,800 --> 00:08:12,579 Vamos a 206 00:08:12,579 --> 00:08:13,519 ¿Vale? 207 00:08:14,899 --> 00:08:21,439 Hombre, ¿cómo querrías hacerlo? 208 00:08:21,639 --> 00:08:21,800 Si no 209 00:08:21,800 --> 00:08:26,300 Ah, pero ¿y cómo lo has hecho? 210 00:08:26,899 --> 00:08:28,839 Bueno, habrás hecho un statement 211 00:08:28,839 --> 00:08:30,019 Normal 212 00:08:30,019 --> 00:08:33,080 bueno ya, vale 213 00:08:33,080 --> 00:08:34,580 pero bueno, estamos mencionando esto 214 00:08:34,580 --> 00:08:37,220 entonces ahora ya 215 00:08:37,220 --> 00:08:39,220 este, esto cuando 216 00:08:39,220 --> 00:08:41,240 se ejecute, se va a ejecutar 217 00:08:41,240 --> 00:08:41,879 con un 218 00:08:41,879 --> 00:08:44,399 ejecutar query, vale 219 00:08:44,399 --> 00:08:47,019 y este que me va a dar un result set 220 00:08:47,019 --> 00:08:52,480 que el result set es la estructura 221 00:08:52,480 --> 00:08:53,399 para 222 00:08:53,399 --> 00:08:56,039 recoger registros de una consulta 223 00:08:56,039 --> 00:08:58,200 también es un recurso que se va a cerrar 224 00:08:58,200 --> 00:09:00,200 entonces podemos ponerlo 225 00:09:00,200 --> 00:09:02,340 dentro del propio 226 00:09:02,340 --> 00:09:04,539 try, entonces dentro 227 00:09:04,539 --> 00:09:05,720 del propio try 228 00:09:05,720 --> 00:09:07,779 podemos poner esto 229 00:09:07,779 --> 00:09:14,320 entonces aquí abro los recursos 230 00:09:14,320 --> 00:09:16,419 y luego 231 00:09:16,419 --> 00:09:17,740 ya los 232 00:09:17,740 --> 00:09:19,799 los uso 233 00:09:19,799 --> 00:09:22,690 entonces 234 00:09:22,690 --> 00:09:27,269 ahí tenemos el 235 00:09:27,269 --> 00:09:27,710 cat 236 00:09:27,710 --> 00:09:31,129 entonces voy a poner para que se quite el error de 237 00:09:31,129 --> 00:09:32,990 compilación de arriba voy a poner ya 238 00:09:32,990 --> 00:09:34,850 desde aquí el retumbentas 239 00:09:34,850 --> 00:09:36,970 vale 240 00:09:36,970 --> 00:09:38,990 bueno pues ahora 241 00:09:38,990 --> 00:09:41,590 ¿Qué vamos a hacer aquí? 242 00:09:42,129 --> 00:09:44,110 Pues vamos a ir recorriendo el result set 243 00:09:44,110 --> 00:09:46,870 Y para cada registro del result set 244 00:09:46,870 --> 00:09:49,129 Instanciamos un objeto 20 y lo mandamos aquí 245 00:09:49,129 --> 00:09:49,850 Y ya está 246 00:09:49,850 --> 00:09:52,970 ¿Vale? Pues como recorremos el result set 247 00:09:52,970 --> 00:09:55,830 El result set tiene una sentencia 248 00:09:55,830 --> 00:09:57,409 Un método que es next 249 00:09:57,409 --> 00:10:00,090 Que te va avanzando el registro 250 00:10:00,090 --> 00:10:03,830 Como inicialmente el result set se queda colocado 251 00:10:03,830 --> 00:10:08,090 Antes de la primera lista de registros 252 00:10:08,090 --> 00:10:10,649 pues tenemos que hacer un result set inicial 253 00:10:10,649 --> 00:10:12,649 y el result set 254 00:10:12,649 --> 00:10:14,549 además te devuelve true o false 255 00:10:14,549 --> 00:10:16,450 si hay registro, no hay 256 00:10:16,450 --> 00:10:18,610 entonces la recorrida estándar 257 00:10:18,610 --> 00:10:20,149 de un result set siempre es así 258 00:10:20,149 --> 00:10:23,950 avanzo y si tengo 259 00:10:23,950 --> 00:10:25,490 avanzo y si tengo 260 00:10:25,490 --> 00:10:26,789 avanzo y si tengo, ¿qué hacemos? 261 00:10:27,370 --> 00:10:29,750 vamos a sacar los valores, primero vamos a instanciar 262 00:10:29,750 --> 00:10:31,230 un venta 263 00:10:31,230 --> 00:10:34,049 vacío y ahora le damos los valores 264 00:10:34,049 --> 00:10:37,350 venta.set 265 00:10:37,350 --> 00:10:39,409 id 266 00:10:39,409 --> 00:10:42,509 pues vamos a sacar del registro 267 00:10:42,509 --> 00:10:44,169 rs el campo 268 00:10:44,169 --> 00:10:45,649 get integer 269 00:10:45,649 --> 00:10:48,029 que se llame 270 00:10:48,029 --> 00:10:48,830 id 271 00:10:48,830 --> 00:10:54,049 es decir, con esto saco del registro 272 00:10:54,049 --> 00:10:55,110 en el que estoy colocada 273 00:10:55,110 --> 00:10:57,090 el campo que se llame id 274 00:10:57,090 --> 00:11:00,990 ahora, vset 275 00:11:00,990 --> 00:11:02,190 coche 276 00:11:02,190 --> 00:11:05,789 pues con este saco el campo 277 00:11:05,789 --> 00:11:09,549 que se llame, en la tabla como se llamaba 278 00:11:09,549 --> 00:11:09,990 esto 279 00:11:09,990 --> 00:11:13,799 Coche sería, ¿verdad? 280 00:11:13,960 --> 00:11:15,240 Voy a ir abriéndolo por aquí 281 00:11:15,240 --> 00:11:18,809 Vale 282 00:11:18,809 --> 00:11:21,710 Se llamaría este campo, se llamaría coche 283 00:11:21,710 --> 00:11:22,309 Imagino 284 00:11:22,309 --> 00:11:25,690 V.set 285 00:11:25,690 --> 00:11:27,289 Color 286 00:11:27,289 --> 00:11:30,129 Pues saco del registro 287 00:11:30,129 --> 00:11:31,769 El campo 288 00:11:31,769 --> 00:11:33,049 Que se llame color 289 00:11:33,049 --> 00:11:38,159 Y v.set 290 00:11:38,159 --> 00:11:39,419 Nif comprador 291 00:11:39,419 --> 00:11:41,799 Saco del registro 292 00:11:41,799 --> 00:11:44,259 El campo que se llama 293 00:11:44,259 --> 00:11:47,909 Nif barra baja 294 00:11:47,909 --> 00:11:49,169 comprador curraría 295 00:11:49,169 --> 00:11:51,710 si no lo cambiamos cuando toque 296 00:11:51,710 --> 00:11:59,490 y ahora esta venta que acabo 297 00:11:59,490 --> 00:12:01,590 de instanciar la añado a ventas 298 00:12:01,590 --> 00:12:07,759 ala pues ya me he hecho 299 00:12:07,759 --> 00:12:09,220 este método de find all 300 00:12:09,220 --> 00:12:11,940 vale aquí 301 00:12:11,940 --> 00:12:14,179 en particular haber usado la sentencia 302 00:12:14,179 --> 00:12:16,139 pre compilada es un poco 303 00:12:16,139 --> 00:12:17,860 tonto porque es que no 304 00:12:17,860 --> 00:12:19,879 necesito pasarle parámetros 305 00:12:19,879 --> 00:12:21,399 luego en el delete 306 00:12:21,399 --> 00:12:23,720 que es el otro que nos falta por hacer 307 00:12:23,720 --> 00:12:25,960 ahí si tiene más sentido hacer la sentencia 308 00:12:25,960 --> 00:12:27,860 pre compilada porque ahí 309 00:12:27,860 --> 00:12:28,940 Así que vamos a meter el ID. 310 00:12:29,840 --> 00:12:30,039 ¿Vale? 311 00:12:30,080 --> 00:12:30,460 Pero bueno. 312 00:12:31,860 --> 00:12:32,059 ¿Vale? 313 00:12:32,080 --> 00:12:32,799 Meteremos la venta. 314 00:12:32,879 --> 00:12:35,919 Entonces, estos campos son los campos de la tabla. 315 00:12:36,179 --> 00:12:37,879 Los nombres de los campos de la tabla. 316 00:12:38,320 --> 00:12:41,480 Que están todos en el registro porque yo le he hecho asterisco. 317 00:12:42,059 --> 00:12:45,960 Si mi select hubiera sido solo select coche color, por ejemplo, 318 00:12:46,620 --> 00:12:49,100 pues yo solamente podría acceder a los campos coche color. 319 00:12:49,779 --> 00:12:50,059 ¿Vale? 320 00:12:51,080 --> 00:12:54,220 Es decir, el result set tiene los registros del select. 321 00:12:54,399 --> 00:12:55,500 Los que me ha devuelto el select. 322 00:12:55,500 --> 00:12:57,620 con los campos que me haya devuelto 323 00:12:57,620 --> 00:12:59,559 el select, yo los saco 324 00:12:59,559 --> 00:13:00,799 con los métodos correspondientes 325 00:13:00,799 --> 00:13:03,559 cada rs.next me avanza 326 00:13:03,559 --> 00:13:04,659 un registro siguiente 327 00:13:04,659 --> 00:13:07,639 y me devuelve true si ese registro 328 00:13:07,639 --> 00:13:09,559 existe, entonces cuando ya me avance 329 00:13:09,559 --> 00:13:11,720 a uno que no existe y por tanto me devuelva 330 00:13:11,720 --> 00:13:13,220 falso, el while ya deja de entrar 331 00:13:13,220 --> 00:13:15,980 el recorrido estándar 332 00:13:15,980 --> 00:13:17,720 vale, pues 333 00:13:17,720 --> 00:13:18,740 el find all está 334 00:13:18,740 --> 00:13:21,340 dime 335 00:13:21,340 --> 00:13:24,759 cuando preparo la declaración 336 00:13:24,759 --> 00:13:26,639 ahí le meto la query 337 00:13:26,639 --> 00:13:28,139 Utiliza prepárate statement 338 00:13:28,139 --> 00:13:29,860 Justo 339 00:13:29,860 --> 00:13:33,320 Es el statement normal 340 00:13:33,320 --> 00:13:34,159 ¿Vale? 341 00:13:34,659 --> 00:13:37,360 Que en el statement normal también puedes ponerle la query 342 00:13:37,360 --> 00:13:38,639 Cuando la creas, ¿eh? 343 00:13:38,639 --> 00:13:40,919 Con el create statement y luego hacer el execute sin parámetros 344 00:13:40,919 --> 00:13:42,460 Tienes las dos posibilidades 345 00:13:42,460 --> 00:13:43,220 En el otro, ¿vale? 346 00:13:44,840 --> 00:13:45,960 A ver, la diferencia 347 00:13:45,960 --> 00:13:48,659 La diferencia es cómo le metes la query 348 00:13:48,659 --> 00:13:51,120 Es que en el otro me da igual que le metas en el execute 349 00:13:51,120 --> 00:13:51,600 Que arriba 350 00:13:51,600 --> 00:13:54,279 La query la metes concatenando 351 00:13:54,279 --> 00:13:56,559 Rompiendo el string y concatenando 352 00:13:56,559 --> 00:13:58,360 con los parámetros, con lo cual te admite inyección 353 00:13:58,360 --> 00:14:00,440 aquí no, aquí lo vamos a 354 00:14:00,440 --> 00:14:02,240 hacer, lo vamos a ver mejor en el delete 355 00:14:02,240 --> 00:14:03,960 aquí no se va a hacer concatenando 356 00:14:03,960 --> 00:14:06,320 aquí se va a hacer poniendo interrogaciones 357 00:14:06,320 --> 00:14:08,179 y luego vas a tener que hacer 358 00:14:08,179 --> 00:14:10,679 luego unas acciones 359 00:14:10,679 --> 00:14:12,240 adicionales 360 00:14:12,240 --> 00:14:14,120 para inyectarlo por fuera 361 00:14:14,120 --> 00:14:16,419 es decir, no los pones directamente en el 362 00:14:16,419 --> 00:14:18,899 sino a través de métodos, los vas a ir metiendo 363 00:14:18,899 --> 00:14:20,259 con lo cual no puedes hacer la inyección 364 00:14:20,259 --> 00:14:21,039 esa es la diferencia 365 00:14:21,039 --> 00:14:25,860 hombre, si le pones en el asterisco 366 00:14:25,860 --> 00:14:27,460 entonces tienes que poner los nombres de los campos 367 00:14:27,460 --> 00:14:28,240 ¿qué quieres? 368 00:14:29,299 --> 00:14:32,860 si quieres todos asterisco 369 00:14:32,860 --> 00:14:34,299 y si quieres unos en concreto 370 00:14:34,299 --> 00:14:36,120 los nombres de los campos separados por comas 371 00:14:36,120 --> 00:14:38,480 vale, pues entonces 372 00:14:38,480 --> 00:14:39,559 el find all está 373 00:14:39,559 --> 00:14:42,940 el ventaservice entonces ya está 374 00:14:42,940 --> 00:14:44,240 find all 375 00:14:44,240 --> 00:14:45,480 get ventas 376 00:14:45,480 --> 00:14:47,179 y ahora ya mi servlet 377 00:14:47,179 --> 00:14:50,759 ¿qué hace? llama al get ventas 378 00:14:50,759 --> 00:14:53,059 y ya se construye una tabla 379 00:14:53,059 --> 00:14:55,220 y va recorriendo 380 00:14:55,220 --> 00:14:57,000 Todas estas ventas que ha sacando 381 00:14:57,000 --> 00:14:58,279 Y las va metiendo en la tablita 382 00:14:58,279 --> 00:15:00,059 Las va metiendo en la tablita 383 00:15:00,059 --> 00:15:02,659 ¿Vale? Entonces, ahora 384 00:15:02,659 --> 00:15:06,820 Me falta, una vez que 385 00:15:06,820 --> 00:15:09,320 He terminado el for, cerrar la tabla 386 00:15:09,320 --> 00:15:11,159 Que eso lo vamos a copiar y pegar 387 00:15:11,159 --> 00:15:11,919 Pues del 388 00:15:11,919 --> 00:15:15,039 Del servlet, del servlet que os he dado 389 00:15:15,039 --> 00:15:16,820 Que lo tendré 390 00:15:16,820 --> 00:15:17,460 Aquí 391 00:15:17,460 --> 00:15:20,679 ¿Vale? Es decir 392 00:15:20,679 --> 00:15:22,080 Falta cerrar la tablita 393 00:15:22,080 --> 00:15:26,679 Falta cerrar la tablita después del for 394 00:15:26,679 --> 00:15:29,600 Pues después del for cerramos la tablita 395 00:15:29,600 --> 00:15:32,980 Y esto cierra mi if 396 00:15:32,980 --> 00:15:34,539 De listar 397 00:15:34,539 --> 00:15:36,559 Uy 398 00:15:36,559 --> 00:15:40,740 Vale, ahora aquí 399 00:15:40,740 --> 00:15:43,519 Lógicamente habría un 400 00:15:43,519 --> 00:15:50,179 El save 401 00:15:50,179 --> 00:15:57,580 Bueno, voy a poner abajo 402 00:15:57,580 --> 00:15:58,360 Pues que 403 00:15:58,360 --> 00:16:00,419 El save 404 00:16:00,419 --> 00:16:04,580 Recuerdes para mi 405 00:16:04,580 --> 00:16:05,399 Interaction 406 00:16:05,399 --> 00:16:08,259 En el series que os he pasado 407 00:16:08,259 --> 00:16:09,759 Lo tengo guardado en un string antes 408 00:16:09,759 --> 00:16:10,659 Para que quede más bonito 409 00:16:10,659 --> 00:16:12,600 Y no arrastrarlo todo el rato 410 00:16:12,600 --> 00:16:16,100 Si la acción sin embargo 411 00:16:16,100 --> 00:16:17,960 Fuera 412 00:16:17,960 --> 00:16:21,679 Eliminar 413 00:16:21,679 --> 00:16:23,159 Que es la otra 414 00:16:23,159 --> 00:16:24,100 Que vamos a hacer 415 00:16:24,100 --> 00:16:25,419 La otra eliminar 416 00:16:25,419 --> 00:16:26,820 Porque es la que nos faltaba el método 417 00:16:26,820 --> 00:16:29,000 Pues entonces lo que sea 418 00:16:29,000 --> 00:16:29,860 lo que sea 419 00:16:29,860 --> 00:16:35,269 la de eliminar me devolverá 420 00:16:35,269 --> 00:16:37,070 un HTML diciendo si ha eliminado correctamente 421 00:16:37,070 --> 00:16:37,870 o no se ha eliminado 422 00:16:37,870 --> 00:16:40,919 no sé si he entendido tu pregunta 423 00:16:40,919 --> 00:16:44,139 el parámetro, no se envía un parámetro 424 00:16:44,139 --> 00:16:44,679 en el index 425 00:16:44,679 --> 00:16:48,460 sí, lo tendremos que recoger aquí 426 00:16:48,460 --> 00:16:49,940 bueno, a ver 427 00:16:49,940 --> 00:16:52,480 es que la opción de eliminar, quien la va a invocar 428 00:16:52,480 --> 00:16:54,279 es el formulario de eliminar 429 00:16:54,279 --> 00:16:55,259 que todavía no tenemos hecho 430 00:16:55,259 --> 00:16:56,820 claro, el formulario de eliminar 431 00:16:56,820 --> 00:17:00,179 claro, nos falta el formulario de eliminar, que es el otro que os he pasado 432 00:17:00,179 --> 00:17:01,980 vale, por ahora este seble 433 00:17:01,980 --> 00:17:02,759 Se queda aquí vacío 434 00:17:02,759 --> 00:17:04,059 Entonces este serlet es 435 00:17:04,059 --> 00:17:07,079 El serlet para la entidad ventas 436 00:17:07,079 --> 00:17:09,920 Y que recoge todo el club de ventas 437 00:17:09,920 --> 00:17:11,200 ¿Vale? 438 00:17:12,519 --> 00:17:13,559 Bueno, pues entonces 439 00:17:13,559 --> 00:17:16,200 Vamos a probar esto de listar ventas 440 00:17:16,200 --> 00:17:17,140 A ver si las lista 441 00:17:17,140 --> 00:17:20,079 Tendréis que lanzar la instancia del 442 00:17:20,079 --> 00:17:32,670 Vale, a ver 443 00:17:32,670 --> 00:17:34,549 Antes de probar nada 444 00:17:34,549 --> 00:17:35,690 Porque no va a funcionar 445 00:17:35,690 --> 00:17:37,769 Nos falta el properties, lógicamente 446 00:17:37,769 --> 00:17:39,049 Vamos a revisar la conexión 447 00:17:39,049 --> 00:17:40,950 Esto ya, ¿vale? 448 00:17:40,950 --> 00:17:43,630 es decir, este 449 00:17:43,630 --> 00:17:45,549 getConnection que me 450 00:17:45,549 --> 00:17:47,430 inyecta aquí el service 451 00:17:47,430 --> 00:17:49,710 que usa el serlet 452 00:17:49,710 --> 00:17:51,430 vamos a revisar conexión 453 00:17:51,430 --> 00:17:55,390 cuidado porque conexión 454 00:17:55,390 --> 00:17:56,730 saca 455 00:17:56,730 --> 00:17:59,309 las propiedades de un fichero de propiedades 456 00:17:59,309 --> 00:18:00,289 que este no lo hemos puesto 457 00:18:00,289 --> 00:18:02,829 entonces nos falta este 458 00:18:02,829 --> 00:18:05,589 ¿vale? porque si no nos va a decir 459 00:18:05,589 --> 00:18:06,470 uy, nos saca 460 00:18:06,470 --> 00:18:09,369 es decir, nuestra clase 461 00:18:09,369 --> 00:18:11,549 de conexión que hemos copiado y pegado tranquilamente 462 00:18:11,549 --> 00:18:13,730 sale de un archivo de properties 463 00:18:13,730 --> 00:18:15,609 pues hombre, vamos a meter 464 00:18:15,609 --> 00:18:16,630 ese archivo de properties 465 00:18:16,630 --> 00:18:18,690 entonces como está 466 00:18:18,690 --> 00:18:21,009 dentro del cargador de objetos 467 00:18:21,009 --> 00:18:23,410 sácame como un recurso 468 00:18:23,410 --> 00:18:25,589 como flujo, pues tenemos que ponerlo 469 00:18:25,589 --> 00:18:27,109 en una ruta del path 470 00:18:27,109 --> 00:18:28,730 que por defecto en los proyectos de Maven 471 00:18:28,730 --> 00:18:30,349 es la de resources 472 00:18:30,349 --> 00:18:33,549 pero el Eclipse no te crea 473 00:18:34,569 --> 00:18:37,630 el main java resources 474 00:18:37,630 --> 00:18:39,630 directamente, entonces hay que 475 00:18:39,630 --> 00:18:41,650 crearlo a mano, pero no pasa nada 476 00:18:41,650 --> 00:18:43,549 entonces directamente 477 00:18:43,549 --> 00:18:44,569 la carpeta java 478 00:18:44,569 --> 00:18:46,410 en la carpeta 479 00:18:46,410 --> 00:18:48,430 no en la main 480 00:18:48,430 --> 00:18:49,849 en la carpeta main 481 00:18:49,849 --> 00:18:52,589 creáis una folder resources y ya está 482 00:18:52,589 --> 00:18:54,349 entonces 483 00:18:54,349 --> 00:18:56,130 aquí src 484 00:18:56,130 --> 00:18:58,349 aquí en main, veis donde están abajo 485 00:18:58,349 --> 00:19:00,609 todas las carpetas, aquí en main 486 00:19:00,609 --> 00:19:02,529 creáis una 487 00:19:02,529 --> 00:19:04,650 una folder 488 00:19:04,650 --> 00:19:05,589 exactamente 489 00:19:05,589 --> 00:19:07,490 resources 490 00:19:07,490 --> 00:19:10,930 que esta 491 00:19:10,930 --> 00:19:12,930 por llamarse así, por llamarse 492 00:19:12,930 --> 00:19:14,529 resources y no Pepito Pérez 493 00:19:14,529 --> 00:19:16,289 cuando esto se empaquete 494 00:19:16,289 --> 00:19:18,509 en war, en jar, como sea 495 00:19:18,509 --> 00:19:20,529 esto va a ir a la raíz, al pad 496 00:19:20,529 --> 00:19:23,009 con lo cual se va a encontrar todo lo que hay ahí dentro 497 00:19:23,009 --> 00:19:24,849 pues ahora ya en resources 498 00:19:24,849 --> 00:19:26,769 el mismo base de datos property 499 00:19:26,769 --> 00:19:28,349 del otro proyecto lo metéis ahí 500 00:19:28,349 --> 00:19:32,630 pues del otro proyecto 501 00:19:32,630 --> 00:19:34,730 el mismo base de datos 502 00:19:34,730 --> 00:19:35,450 properties 503 00:19:35,450 --> 00:19:39,740 lo metéis ahí 504 00:19:39,740 --> 00:19:51,150 ala, ahí está el base de datos properties 505 00:19:51,150 --> 00:19:53,170 que tendrá la url 506 00:19:53,170 --> 00:19:55,089 donde está el sistema gestor de base de datos 507 00:19:55,089 --> 00:19:57,269 con la base de datos 508 00:19:57,269 --> 00:19:58,150 con la que vais a trabajar 509 00:19:58,150 --> 00:20:01,309 y el usuario, root 1, 2, 3, 4 510 00:20:01,309 --> 00:20:02,549 muy mal usado, pero bueno 511 00:20:02,549 --> 00:20:05,220 vale 512 00:20:05,220 --> 00:20:08,000 pues en principio 513 00:20:08,000 --> 00:20:10,720 estaría todo, en principio 514 00:20:10,720 --> 00:20:13,200 la conexión debería encontrarla 515 00:20:13,200 --> 00:20:14,619 porque con nuestro objeto conexión 516 00:20:14,619 --> 00:20:16,400 saca los datos del properties 517 00:20:16,400 --> 00:20:18,960 y hace la getConnection 518 00:20:18,960 --> 00:20:20,579 y me la devuelve a través del método 519 00:20:20,579 --> 00:20:24,940 getConnection. El service 520 00:20:24,940 --> 00:20:26,339 me llama al DAO, 521 00:20:26,460 --> 00:20:28,099 el DAO llama a findAll, 522 00:20:28,900 --> 00:20:29,920 el findAll 523 00:20:29,920 --> 00:20:32,220 ahora ya 524 00:20:32,220 --> 00:20:34,380 a través de la conexión saca 525 00:20:34,380 --> 00:20:36,039 la lista de ventas y me la devuelve 526 00:20:36,039 --> 00:20:37,660 y el serlet 527 00:20:37,660 --> 00:20:40,500 que ya no sé ni dónde está 528 00:20:40,500 --> 00:20:42,019 aquí, y el serlet 529 00:20:42,019 --> 00:20:44,160 con esas ventas que me ha sacado 530 00:20:44,160 --> 00:20:45,599 pues las construye. 531 00:20:46,480 --> 00:20:48,240 Muy sencillito, ¿vale? 532 00:20:48,980 --> 00:20:50,400 Vale, pues vamos a 533 00:20:50,400 --> 00:20:52,519 volver a lanzar esta aplicación 534 00:20:52,519 --> 00:20:56,559 con que 535 00:20:56,559 --> 00:20:58,839 reiniciéis el 536 00:20:58,839 --> 00:21:01,440 server, ya se redespliega 537 00:21:01,440 --> 00:21:03,339 sola, si aquí os vais al server 538 00:21:03,339 --> 00:21:04,839 y le decís restart 539 00:21:04,839 --> 00:21:07,720 se redespliega la nueva versión de la aplicación 540 00:21:07,720 --> 00:21:09,440 entonces 541 00:21:09,440 --> 00:21:15,900 restart, ahí está 542 00:21:15,900 --> 00:21:17,920 y ahora me voy a abrir el explorador 543 00:21:17,920 --> 00:21:19,680 y voy a 544 00:21:19,680 --> 00:21:21,319 llamar a mi aplicación 545 00:21:21,319 --> 00:21:21,980 que es esta 546 00:21:21,980 --> 00:21:25,900 este es mi formulario 547 00:21:25,900 --> 00:21:28,339 Ahora 548 00:21:28,339 --> 00:21:29,859 Vamos a llamar 549 00:21:29,859 --> 00:21:31,420 Cualquiera de estos que llamemos 550 00:21:31,420 --> 00:21:33,480 Me va a decir que no encuentra el recurso 551 00:21:33,480 --> 00:21:36,039 Porque cualquiera de estos va a un formulario 552 00:21:36,039 --> 00:21:36,779 Que no tenemos hecho 553 00:21:36,779 --> 00:21:38,619 Entonces cualquiera de estos que llame yo 554 00:21:38,619 --> 00:21:40,039 Va a un formulario que todavía no está 555 00:21:40,039 --> 00:21:41,480 Con lo cual no va a salir 556 00:21:41,480 --> 00:21:43,700 Y este ya sí que va al serle directamente 557 00:21:43,700 --> 00:21:44,420 El de abajo sí 558 00:21:44,420 --> 00:21:46,539 Vamos a ver qué pasa 559 00:21:46,539 --> 00:21:48,480 Toma ya 560 00:21:48,480 --> 00:21:51,049 Vale 561 00:21:51,049 --> 00:21:54,950 Connection is null 562 00:21:54,950 --> 00:21:57,069 ¿Vale? 563 00:21:57,210 --> 00:22:01,170 Sí 564 00:22:01,170 --> 00:22:05,240 La tengo levantada 565 00:22:05,240 --> 00:22:06,900 Vale, si yo voy hasta arriba 566 00:22:06,900 --> 00:22:08,400 En toda mi traza, no 567 00:22:08,400 --> 00:22:10,119 Este error lo esperaba 568 00:22:10,119 --> 00:22:13,460 Y esto es lo más bonito y maravilloso que os quería explicar hoy 569 00:22:13,460 --> 00:22:15,160 Y me dice 570 00:22:15,160 --> 00:22:17,420 Lo siento 571 00:22:17,420 --> 00:22:18,839 Pero no encuentro el driver 572 00:22:18,839 --> 00:22:20,640 Para esta URL 573 00:22:20,640 --> 00:22:23,900 El properties lo ha leído bien 574 00:22:23,900 --> 00:22:25,920 Porque si no, no habría encontrado esta URL 575 00:22:25,920 --> 00:22:26,819 Que está en el properties 576 00:22:26,819 --> 00:22:29,559 y la cadena de conexión está estupenda 577 00:22:29,559 --> 00:22:31,700 ¿cómo que no encuentras 578 00:22:31,700 --> 00:22:33,559 un driver? ¿cómo puede ser 579 00:22:33,559 --> 00:22:34,539 que no lo encuentres? 580 00:22:35,240 --> 00:22:36,980 si tú tienes en tu POM 581 00:22:36,980 --> 00:22:37,599 aquí 582 00:22:37,599 --> 00:22:41,779 tienes aquí en el POM, y no hace falta que entre en el POM 583 00:22:41,779 --> 00:22:43,420 os vais a las dependencias 584 00:22:43,420 --> 00:22:45,619 de Maven y tienes aquí un driver 585 00:22:45,619 --> 00:22:46,980 como un castillo 586 00:22:46,980 --> 00:22:49,240 ¿cómo puede ser que no lo encuentre? 587 00:22:50,880 --> 00:22:51,680 pues no lo encuentra 588 00:22:51,680 --> 00:22:54,500 ¿y por qué no lo encuentra? 589 00:22:54,500 --> 00:22:57,599 pues claro, aquí viene 590 00:22:57,599 --> 00:22:59,779 la maravilla 591 00:22:59,779 --> 00:23:00,880 y es 592 00:23:00,880 --> 00:23:03,339 porque aquí hay dos programas vivos 593 00:23:03,339 --> 00:23:05,119 sin contar la máquina virtual 594 00:23:05,119 --> 00:23:07,839 aquí está mi aplicación 595 00:23:07,839 --> 00:23:09,240 y está el Tomcat 596 00:23:09,240 --> 00:23:11,839 y cada uno de ellos 597 00:23:11,839 --> 00:23:13,460 tiene su ámbito de instancias 598 00:23:13,460 --> 00:23:15,000 distinto 599 00:23:15,000 --> 00:23:16,759 antes yo tenía 600 00:23:16,759 --> 00:23:20,140 en la aplicación de escritorio teníamos una única instancia 601 00:23:20,140 --> 00:23:21,440 que era mi aplicación 602 00:23:21,440 --> 00:23:23,880 con lo cual todos los objetos existentes 603 00:23:23,880 --> 00:23:25,759 incluyendo los propios driver 604 00:23:25,759 --> 00:23:27,880 estaban en un único ámbito 605 00:23:27,880 --> 00:23:30,140 todos se miraban, se veían con todos 606 00:23:30,140 --> 00:23:32,359 ahora que ha pasado aquí 607 00:23:32,359 --> 00:23:34,880 cuando la aplicación 608 00:23:34,880 --> 00:23:35,579 se ha cargado 609 00:23:35,579 --> 00:23:38,180 cuando el Tomcat se ha cargado 610 00:23:38,180 --> 00:23:40,259 perdón, cuando la aplicación se ha cargado 611 00:23:40,259 --> 00:23:42,539 se ha cargado 612 00:23:42,539 --> 00:23:44,420 la clase 613 00:23:44,420 --> 00:23:45,279 DriverManager 614 00:23:45,279 --> 00:23:47,819 entonces DriverManager que es 615 00:23:47,819 --> 00:23:49,680 a ver 616 00:23:49,680 --> 00:23:51,819 DriverManager es esto 617 00:23:51,819 --> 00:23:53,160 vámonos a la clase Connection 618 00:23:53,160 --> 00:23:58,279 driverManager es este tío, ¿verdad? 619 00:23:59,059 --> 00:24:00,440 donde tenemos el 620 00:24:00,440 --> 00:24:01,180 este 621 00:24:01,180 --> 00:24:04,980 driverManager es este, vale, esta es una clase 622 00:24:04,980 --> 00:24:06,839 que se dedica 623 00:24:06,839 --> 00:24:08,880 a manejar todos los objetos driver 624 00:24:08,880 --> 00:24:09,940 que tenga la aplicación 625 00:24:09,940 --> 00:24:13,039 en mi caso va a tener solo uno, el de MySQL 626 00:24:13,039 --> 00:24:14,259 pero podría tener muchos 627 00:24:14,259 --> 00:24:16,680 esta es una clase que se dedica a manejar 628 00:24:16,680 --> 00:24:17,980 todos los objetos driver que tenga 629 00:24:17,980 --> 00:24:20,920 esta clase cuando se carga 630 00:24:20,920 --> 00:24:22,859 se carga con el 631 00:24:22,859 --> 00:24:24,940 Tomcat, porque cuando mi aplicación arranca 632 00:24:24,940 --> 00:24:26,440 cuando yo la haya arrancado 633 00:24:26,440 --> 00:24:28,160 primero arranca el Tomcat 634 00:24:28,160 --> 00:24:30,079 y luego arranca la aplicación 635 00:24:30,079 --> 00:24:32,619 el Tomcat arranca 636 00:24:32,619 --> 00:24:35,000 y arranca su driver manager 637 00:24:35,000 --> 00:24:36,779 que es su gestor de drivers 638 00:24:36,779 --> 00:24:38,519 que ahí se queda tan pancho 639 00:24:38,519 --> 00:24:41,539 vale, luego arranca la aplicación 640 00:24:41,539 --> 00:24:43,299 y la aplicación 641 00:24:43,299 --> 00:24:44,460 instancia 642 00:24:44,460 --> 00:24:46,980 sus dependencias, entre ellas 643 00:24:46,980 --> 00:24:49,119 la del driver de MySQL, que es esta 644 00:24:49,119 --> 00:24:51,500 vale, esta de aquí 645 00:24:51,500 --> 00:24:53,460 luego 646 00:24:53,460 --> 00:24:54,720 el driver 647 00:24:54,720 --> 00:24:56,619 está en el contexto de objetos 648 00:24:56,619 --> 00:24:57,480 de la aplicación 649 00:24:57,480 --> 00:25:00,579 y el driver manager está en el contexto 650 00:25:00,579 --> 00:25:02,660 de objetos del Tomcat, con lo cual no se ven 651 00:25:02,660 --> 00:25:04,640 entonces, el driver 652 00:25:04,640 --> 00:25:05,980 cuando yo le digo aquí 653 00:25:05,980 --> 00:25:08,180 a driver manager getConnection 654 00:25:08,180 --> 00:25:10,559 cuando hago esto de aquí 655 00:25:10,559 --> 00:25:12,599 driver manager ¿qué hace? 656 00:25:12,720 --> 00:25:14,259 voy a buscar un driver 657 00:25:14,259 --> 00:25:17,000 para manejar esta conexión, voy a buscarlo 658 00:25:17,000 --> 00:25:18,599 dice, pero si no tengo ningún driver 659 00:25:18,599 --> 00:25:20,539 claro, porque driver manager está 660 00:25:20,539 --> 00:25:22,500 mirando en su ámbito 661 00:25:22,500 --> 00:25:24,160 de objetos, y su ámbito de objetos 662 00:25:24,160 --> 00:25:25,960 instanciados es el ámbito del Tomcat 663 00:25:25,960 --> 00:25:27,859 y sin embargo 664 00:25:27,859 --> 00:25:30,099 nuestro driver está instanciado 665 00:25:30,099 --> 00:25:32,099 en el ámbito de la aplicación, porque es una dependencia 666 00:25:32,099 --> 00:25:34,099 de la aplicación, no es una dependencia del Tomcat 667 00:25:34,099 --> 00:25:35,200 es una dependencia de la aplicación 668 00:25:35,200 --> 00:25:37,960 entonces driver mayer te dice, perdóname 669 00:25:37,960 --> 00:25:40,019 no tengo ningún driver, no lo tiene 670 00:25:40,019 --> 00:25:42,140 vale, pues 671 00:25:42,140 --> 00:25:43,079 ¿cómo arreglamos esto? 672 00:25:43,779 --> 00:25:44,920 pues hay que hacer una cosa 673 00:25:44,920 --> 00:25:48,039 que es registrarlo 674 00:25:48,039 --> 00:25:50,319 específicamente y decirle 675 00:25:50,319 --> 00:25:52,299 aquí al Tomcat cuando el Tomcat está leyendo 676 00:25:52,299 --> 00:25:53,940 esto, oye tú 677 00:25:53,940 --> 00:25:56,180 instánciate esto, cógete este objeto 678 00:25:56,180 --> 00:25:58,079 que te va a hacer falta, cógete este 679 00:25:58,079 --> 00:25:59,460 porque está instanciado 680 00:25:59,460 --> 00:26:01,980 está registrado, que se llama así 681 00:26:01,980 --> 00:26:04,299 en el ámbito de objetos de la aplicación 682 00:26:04,299 --> 00:26:04,940 pero en el tuyo 683 00:26:04,940 --> 00:26:07,880 bueno, pues ¿cómo se le dice eso? 684 00:26:08,599 --> 00:26:09,839 pues con una sentencia 685 00:26:09,839 --> 00:26:10,759 que se llama 686 00:26:10,759 --> 00:26:12,819 esta de aquí 687 00:26:12,819 --> 00:26:19,750 que esta es la que te obliga 688 00:26:19,750 --> 00:26:22,190 a registrar 689 00:26:22,190 --> 00:26:24,289 objetos, en tu ámbito de objetos 690 00:26:24,289 --> 00:26:25,869 entonces aquí vamos a poner 691 00:26:25,869 --> 00:26:26,910 el 692 00:26:26,910 --> 00:26:29,730 espera, el driver 693 00:26:29,730 --> 00:26:31,690 que el driver, uno podría buscar desde aquí 694 00:26:31,690 --> 00:26:33,710 como se llama, se iría a la dependencia 695 00:26:33,710 --> 00:26:35,930 lo buscaría, como se llama 696 00:26:35,930 --> 00:26:37,630 com.mysql 697 00:26:37,630 --> 00:26:39,869 cjjdbc 698 00:26:39,869 --> 00:26:43,230 driver, este es 699 00:26:43,230 --> 00:26:45,410 mi driver, este es el objeto que yo quiero 700 00:26:45,410 --> 00:26:47,170 este es el objeto que quiero 701 00:26:47,170 --> 00:26:48,970 que se quede visible 702 00:26:48,970 --> 00:26:50,609 en el ámbito de objetos del podcast 703 00:26:50,609 --> 00:26:52,809 pues transformamos y ponemos todo 704 00:26:52,809 --> 00:26:55,230 com.mysql 705 00:26:56,349 --> 00:26:59,700 punto 706 00:26:59,700 --> 00:27:12,509 punto jdbc, no este es el antiguo, es con el cj delante, con el cj, es el moderno, 707 00:27:12,509 --> 00:27:26,210 está aquí, este sería, driver, este sería que está en comma y sql, cj.jdbc.driver, 708 00:27:26,210 --> 00:27:33,410 Y esto puede lanzar una excepción 709 00:27:33,410 --> 00:27:35,569 Porque esa clase no existiera 710 00:27:35,569 --> 00:27:37,549 No pasa nada 711 00:27:37,549 --> 00:27:41,029 Bueno pues con esto 712 00:27:41,029 --> 00:27:43,309 Hacemos que la instancia 713 00:27:43,309 --> 00:27:44,890 Driver que estaba solamente 714 00:27:44,890 --> 00:27:46,990 En el ámbito de dependencias de la aplicación 715 00:27:46,990 --> 00:27:48,630 Pum, pase al Tomcat 716 00:27:48,630 --> 00:27:50,369 Porque Tomcat es el que va haciendo todo eso 717 00:27:50,369 --> 00:27:56,460 Es que se me abre sola la ventanita esa 718 00:27:56,460 --> 00:28:00,009 Entonces 719 00:28:00,009 --> 00:28:01,789 Esto 720 00:28:01,789 --> 00:28:09,369 esta sentencia 721 00:28:09,369 --> 00:28:11,869 es la sentencia que se ha llamado de toda la vida 722 00:28:11,869 --> 00:28:13,950 registrar el driver 723 00:28:13,950 --> 00:28:15,930 para que el driver manager lo encuentre 724 00:28:15,930 --> 00:28:18,230 entonces hasta la versión no sé qué 725 00:28:18,230 --> 00:28:20,089 de los 726 00:28:20,089 --> 00:28:21,789 drivers MySQL hasta la 8 727 00:28:21,789 --> 00:28:24,329 o no sé cuál, había que verlo siempre sí o sí 728 00:28:24,329 --> 00:28:26,069 pero a partir de la 729 00:28:26,069 --> 00:28:27,269 versión 8 de los drivers 730 00:28:27,269 --> 00:28:29,690 el driver se carga solo 731 00:28:29,690 --> 00:28:31,789 con lo cual no hay que 732 00:28:31,789 --> 00:28:33,730 ponerla, pero claro, se carga 733 00:28:33,730 --> 00:28:35,069 solo en tu aplicación 734 00:28:35,069 --> 00:28:37,750 si te está ejecutando otro como es el Tomcat 735 00:28:37,750 --> 00:28:39,450 a él no le vale lo que tú te has cargado 736 00:28:39,450 --> 00:28:41,430 por eso tienes que poner esto 737 00:28:41,430 --> 00:28:43,150 para que él lo vea visible 738 00:28:43,150 --> 00:28:45,509 con lo cual, las aplicaciones web 739 00:28:45,509 --> 00:28:47,690 que se ejecutan a través de 740 00:28:47,690 --> 00:28:49,430 un secundario que es el Tomcat 741 00:28:49,430 --> 00:28:51,309 pues vas a tener que registrar 742 00:28:51,309 --> 00:28:53,890 todos los objetos que necesite 743 00:28:53,890 --> 00:28:54,829 el Cyber Manager 744 00:28:54,829 --> 00:29:01,049 Entonces 745 00:29:01,049 --> 00:29:03,289 A ver, voy a ver porque si lo tengo 746 00:29:03,289 --> 00:29:05,289 Esto, este es el proyecto que voy a subir 747 00:29:05,289 --> 00:29:06,730 Si lo tengo escrito por aquí 748 00:29:06,730 --> 00:29:09,349 Lo copio y pego para que se quede subido 749 00:29:09,349 --> 00:29:12,950 Se suponía 750 00:29:12,950 --> 00:29:14,650 Que lo escribí por aquí para subirlo 751 00:29:14,650 --> 00:29:16,069 Esto 752 00:29:16,069 --> 00:29:18,049 Todo este rollo 753 00:29:18,049 --> 00:29:20,250 En todo este rollo intenté explicar esto 754 00:29:20,250 --> 00:29:21,809 Lo intenté explicar más o menos 755 00:29:21,809 --> 00:29:23,990 Pues todo este rollo lo copio aquí 756 00:29:23,990 --> 00:29:27,130 Para que cuando suba el proyecto 757 00:29:27,130 --> 00:29:28,690 Pues se quede así 758 00:29:28,690 --> 00:29:37,359 Esto lo voy a subir ahora 759 00:29:37,359 --> 00:29:38,559 Porque lo estamos construyendo 760 00:29:38,559 --> 00:29:41,240 ¿Vale? Lo voy a subir cuando lo acabemos 761 00:29:41,240 --> 00:29:42,559 Vale 762 00:29:42,559 --> 00:29:44,680 ¡Hala! 763 00:29:45,680 --> 00:29:47,440 Pues ahora ya sí no debería 764 00:29:47,440 --> 00:29:49,380 Darme ese error de que no encuentro el driver 765 00:29:49,380 --> 00:29:50,920 Ahora tienes que encontrarlo muchacho 766 00:29:50,920 --> 00:29:52,339 Vale 767 00:29:52,339 --> 00:29:54,559 Pues vamos a 768 00:29:54,559 --> 00:29:57,960 Reiniciar el server 769 00:29:57,960 --> 00:30:01,180 Restart 770 00:30:01,180 --> 00:30:06,400 Vamos a darle marcha a Catalina 771 00:30:06,400 --> 00:30:11,680 Y... 772 00:30:11,680 --> 00:30:14,000 Ah, que tenía cerrado yo mi explorador 773 00:30:14,000 --> 00:30:17,539 Tengo aquí mi este 774 00:30:17,539 --> 00:30:19,339 Listar ventas 775 00:30:19,339 --> 00:30:20,359 Mirad que bonito 776 00:30:20,359 --> 00:30:23,279 ¿Vale? Ventas listadas 777 00:30:23,279 --> 00:30:24,079 Todo estupendo 778 00:30:24,079 --> 00:30:26,779 Vamos a hacer eliminar ventas 779 00:30:26,779 --> 00:30:28,579 Que ahora ya sé que va a necesitar un formulario 780 00:30:28,579 --> 00:30:30,539 Con otro, el método que nos faltaba 781 00:30:30,539 --> 00:30:31,539 Eliminar ventas 782 00:30:31,539 --> 00:30:38,380 claro, pero eso como una sentencia ya está 783 00:30:38,380 --> 00:30:40,220 no haría falta devolver nada 784 00:30:40,220 --> 00:30:43,119 en el método de 785 00:30:43,119 --> 00:30:44,579 bueno, no hace falta devolver 786 00:30:44,579 --> 00:30:45,700 hombre, un mensaje de ok 787 00:30:45,700 --> 00:30:46,940 que menos 788 00:30:46,940 --> 00:30:50,339 pero lo que sí que necesita a cambio es un parámetro 789 00:30:50,339 --> 00:30:52,359 es que id quieres eliminar 790 00:30:52,359 --> 00:30:53,640 que este no necesitaba nada 791 00:30:53,640 --> 00:30:55,079 pues venga 792 00:30:55,079 --> 00:30:56,599 dígame 793 00:30:56,599 --> 00:30:57,980 ¿te acuerdas de un cambio 794 00:30:57,980 --> 00:30:59,799 de que estaba barra coche 795 00:30:59,799 --> 00:31:01,299 que no fuera el barra venta 796 00:31:01,299 --> 00:31:04,559 si, en el 797 00:31:04,559 --> 00:31:07,180 index, en el index 798 00:31:07,180 --> 00:31:09,200 aquí, en el 799 00:31:09,200 --> 00:31:10,500 index, aquí 800 00:31:10,500 --> 00:31:13,099 yo tenía puesto coches porque era la url 801 00:31:13,099 --> 00:31:14,660 del otro proyecto, pues ventas 802 00:31:14,660 --> 00:31:17,059 vale, pues vamos 803 00:31:17,059 --> 00:31:18,500 ahora a hacer eliminar 804 00:31:18,500 --> 00:31:21,000 que es el que nos faltaba, podríais 805 00:31:21,000 --> 00:31:22,000 hacer estos 806 00:31:22,000 --> 00:31:23,599 y ya está 807 00:31:23,599 --> 00:31:30,059 desde webapp 808 00:31:30,059 --> 00:31:32,920 todo lo que 809 00:31:32,920 --> 00:31:34,779 webapp es la raíz 810 00:31:34,779 --> 00:31:37,079 de la url, de alguna manera 811 00:31:37,079 --> 00:31:39,160 vale, pues venga, eliminar 812 00:31:39,160 --> 00:31:40,900 venta, pues vamos a hacer este 813 00:31:40,900 --> 00:31:42,680 formulario al que me lleva este enlace 814 00:31:42,680 --> 00:31:45,299 pues más que hacerlo, lo vais a copiar 815 00:31:45,299 --> 00:31:46,500 de lo que os he pasado 816 00:31:46,500 --> 00:31:52,880 yo y los domingos por la tarde, subiendo 817 00:31:52,880 --> 00:31:54,880 cosas para que no 818 00:31:54,880 --> 00:31:56,160 nos herniemos copiando 819 00:31:56,160 --> 00:32:03,400 Venga, vamos a copiar el form 820 00:32:03,400 --> 00:32:04,839 Eliminar 821 00:32:04,839 --> 00:32:10,460 Y lo hacemos colgar 822 00:32:10,460 --> 00:32:11,539 De webapp 823 00:32:11,539 --> 00:32:20,779 Webapp, vale, ¿dónde está webapp? 824 00:32:32,799 --> 00:32:34,420 Jolines, que no veo ni webapp 825 00:32:34,420 --> 00:32:35,960 Ahí, paste 826 00:32:35,960 --> 00:32:40,380 Vale, pues vamos a ver el formulario 827 00:32:40,380 --> 00:32:42,119 De eliminar, aparte del estilo 828 00:32:42,119 --> 00:32:44,059 ese tan bonito que nos ha dado ChaGPT. 829 00:32:45,700 --> 00:32:46,220 Eliminar 830 00:32:46,220 --> 00:32:48,460 venta. Cuidado 831 00:32:48,460 --> 00:32:50,420 el action del formulario. 832 00:32:51,180 --> 00:32:51,980 Vamos a cambiarlo 833 00:32:51,980 --> 00:32:53,819 porque mi serlet yo lo he 834 00:32:53,819 --> 00:32:55,559 hecho colgar de ventas. 835 00:32:56,900 --> 00:32:57,960 Cuidado. Cuidado 836 00:32:57,960 --> 00:33:00,460 primero. Action del formulario. 837 00:33:00,539 --> 00:33:01,480 Juanjo y Ana. 838 00:33:02,359 --> 00:33:03,960 Que luego decís, ¿dónde habéis cambiado? Pues en el 839 00:33:03,960 --> 00:33:05,019 action del formulario. 840 00:33:06,299 --> 00:33:07,619 Ventas. ¿Vale? 841 00:33:08,099 --> 00:33:10,160 Y ahora, le pasamos 842 00:33:10,160 --> 00:33:11,420 como parámetro escondido 843 00:33:11,420 --> 00:33:14,380 qué queremos hacer con ese formulario, ¿vale? 844 00:33:14,380 --> 00:33:17,099 Como parámetro escondido le pasamos E, que es eliminar, 845 00:33:17,160 --> 00:33:18,759 lo que queremos hacer, ¿vale? 846 00:33:19,359 --> 00:33:20,140 Que es eliminar. 847 00:33:20,680 --> 00:33:23,099 Y ahora le pasamos el ID de la venta 848 00:33:23,099 --> 00:33:25,680 con esta caja tan bonita de números 849 00:33:25,680 --> 00:33:27,940 que me va a salir luego y un volver al menú y ya está. 850 00:33:28,440 --> 00:33:30,259 Luego los parámetros que envía este formulario 851 00:33:30,259 --> 00:33:32,740 son como escondido la acción a hacer 852 00:33:32,740 --> 00:33:35,000 para que el ser le sepa que tiene que eliminar 853 00:33:35,000 --> 00:33:36,779 y el ID y ya está. 854 00:33:37,920 --> 00:33:40,220 Pero, importante, 855 00:33:40,220 --> 00:33:42,059 este método no va en GET 856 00:33:42,059 --> 00:33:43,880 no debería ir en GET 857 00:33:43,880 --> 00:33:45,759 sino que va en POST 858 00:33:45,759 --> 00:33:47,359 ¿es obligatorio? 859 00:33:47,579 --> 00:33:48,579 no es obligatorio 860 00:33:48,579 --> 00:33:52,119 pero es conveniente para evitar mal funcionamiento 861 00:33:52,119 --> 00:33:54,460 ¿por qué este en POST y el otro en GET? 862 00:33:55,680 --> 00:33:56,160 claro 863 00:33:56,160 --> 00:33:57,119 el otro iba en GET 864 00:33:57,119 --> 00:33:58,240 porque el otro consultaba 865 00:33:58,240 --> 00:34:01,579 no cambiaba datos de la base de datos 866 00:34:01,579 --> 00:34:02,920 este 867 00:34:02,920 --> 00:34:05,980 al igual que el de actualizar o insertar 868 00:34:05,980 --> 00:34:07,779 va a modificar los datos 869 00:34:07,779 --> 00:34:09,320 con lo cual debería ir en POST 870 00:34:09,320 --> 00:34:10,840 ¿por qué exactamente? 871 00:34:11,699 --> 00:34:13,039 pues bueno, por muchas implicaciones 872 00:34:13,039 --> 00:34:15,340 o sea, una por ejemplo, una importante 873 00:34:15,340 --> 00:34:17,119 cuando tú le das a F5 874 00:34:17,119 --> 00:34:18,360 a un formulario 875 00:34:18,360 --> 00:34:21,280 ¿vale? si el formulario 876 00:34:21,280 --> 00:34:23,360 es, tú lo tienes 877 00:34:23,360 --> 00:34:25,239 como GET, no te pide 878 00:34:25,239 --> 00:34:26,599 confirmación de reenvío 879 00:34:26,599 --> 00:34:29,380 entonces, si estás modificando los datos 880 00:34:29,380 --> 00:34:30,980 si es un formulario que modifica, igual lo estás 881 00:34:30,980 --> 00:34:33,179 haciendo un insert una y otra vez, una y otra vez 882 00:34:33,179 --> 00:34:35,420 y no quieres hacerlo, sin embargo, si el formulario 883 00:34:35,420 --> 00:34:37,159 es POST y tú le das a F5 884 00:34:37,159 --> 00:34:38,340 él te dice 885 00:34:38,340 --> 00:34:41,400 desear reenviar los datos del formulario 886 00:34:41,400 --> 00:34:43,179 esa ya es la primera cosa 887 00:34:43,179 --> 00:34:43,880 interesante 888 00:34:43,880 --> 00:34:47,059 segunda, los GET 889 00:34:47,059 --> 00:34:49,219 van a la, los formularios GET 890 00:34:49,219 --> 00:34:50,639 los resultados de los formularios GET 891 00:34:50,639 --> 00:34:52,159 van a la caché 892 00:34:52,159 --> 00:34:54,679 se cachean, los POST no 893 00:34:54,679 --> 00:34:57,079 ¿vale? 894 00:34:57,840 --> 00:34:59,280 entonces, es que es justo lo que 895 00:34:59,280 --> 00:34:59,619 queremos 896 00:34:59,619 --> 00:35:03,139 los POST no queremos que se 897 00:35:03,139 --> 00:35:05,059 cacheen, porque si se cachean, yo a lo mejor 898 00:35:05,059 --> 00:35:06,579 creo que estoy insertando ventas 899 00:35:06,579 --> 00:35:07,780 y no lo estoy haciendo 900 00:35:07,780 --> 00:35:09,739 porque estoy todo el rato en local 901 00:35:09,739 --> 00:35:12,340 con el get no es tan importante 902 00:35:12,340 --> 00:35:14,599 que estar tirando de la cache 903 00:35:14,599 --> 00:35:16,460 vale, si tiro de la cache 904 00:35:16,460 --> 00:35:18,420 no estaré refrescando la consulta 905 00:35:18,420 --> 00:35:20,780 pero lo grave es cuando estoy actualizando 906 00:35:20,780 --> 00:35:21,760 cosas sin saber 907 00:35:21,760 --> 00:35:24,480 entonces hay diferencias entre 908 00:35:24,480 --> 00:35:25,840 cómo trata el navegador 909 00:35:25,840 --> 00:35:28,360 un formulario get y un formulario post 910 00:35:28,360 --> 00:35:29,599 cómo lo trata, vale 911 00:35:29,599 --> 00:35:32,280 entonces precisamente por esa diferencia en cómo se trata 912 00:35:32,280 --> 00:35:34,380 un formulario get y post desde el navegador 913 00:35:34,380 --> 00:35:36,400 asumimos 914 00:35:36,400 --> 00:35:44,480 Que las acciones CRU de modificar van en POST y las de consultar en GET. 915 00:35:45,079 --> 00:35:51,119 Aparte que ya sabéis que en el POST los parámetros se mandan en el cuerpo de la petición, 916 00:35:51,239 --> 00:35:53,980 con lo cual no son visibles a simple vista y en el GET se mandan. 917 00:35:54,800 --> 00:36:00,360 Entonces, un segundo, en un formulario que vas a insertar datos y estás mandando los datos, 918 00:36:00,360 --> 00:36:02,079 si lo mandas como get 919 00:36:02,079 --> 00:36:04,179 es que van todos puestos 920 00:36:04,179 --> 00:36:06,260 en la URL y los ves, se ven 921 00:36:06,260 --> 00:36:07,460 se ven directamente 922 00:36:07,460 --> 00:36:09,900 lo que vas a insertar Pepito con su DNI 923 00:36:09,900 --> 00:36:12,179 con su no sé qué, mejor en post 924 00:36:12,179 --> 00:36:13,820 y así va en el cuerpo y no ves los datos 925 00:36:13,820 --> 00:36:16,000 que vas a insertar, estoy convencido 926 00:36:16,000 --> 00:36:18,179 que me podría haber callado mucho antes 927 00:36:18,179 --> 00:36:19,400 porque ya estarías convencido de antes 928 00:36:19,400 --> 00:36:21,940 claro, vale 929 00:36:21,940 --> 00:36:24,139 pues entonces, este va a hacer post 930 00:36:24,139 --> 00:36:26,320 con lo cual 931 00:36:26,320 --> 00:36:28,340 a qué punto de mi serlet va a llegar 932 00:36:28,340 --> 00:36:30,280 va a llegar aquí 933 00:36:30,280 --> 00:36:33,199 pero no pasa nada porque yo no me voy a duplicar 934 00:36:33,199 --> 00:36:34,420 el mismo código en los dos sitios 935 00:36:34,420 --> 00:36:36,760 de aquí hago este código y ya está 936 00:36:36,760 --> 00:36:39,059 ¿vale? no significa esto 937 00:36:39,059 --> 00:36:41,360 que el formulario haya cambiado de post a get 938 00:36:41,360 --> 00:36:43,039 el formulario sigue siendo post y se trata 939 00:36:43,039 --> 00:36:45,420 como post en el navegador, pero el código 940 00:36:45,420 --> 00:36:47,300 de respuesta pues se va 941 00:36:47,300 --> 00:36:49,219 aquí arriba, entonces se va aquí arriba 942 00:36:49,219 --> 00:36:50,980 y ahora ya sí, oye si el parámetro 943 00:36:50,980 --> 00:36:52,619 action es igual a eliminar 944 00:36:52,619 --> 00:36:55,139 que va a ser precisamente el parámetro 945 00:36:55,139 --> 00:36:57,179 action que va a ser el que lleva 946 00:36:57,179 --> 00:36:57,960 el formulario 947 00:36:57,960 --> 00:37:00,159 ¿no? lleva el parámetro 948 00:37:00,159 --> 00:37:02,400 eliminar, pues entonces 949 00:37:02,400 --> 00:37:04,000 ahora ya tendremos que sacar el id 950 00:37:04,000 --> 00:37:05,000 y eliminar por id 951 00:37:05,000 --> 00:37:08,019 pues venga, ahora ya tendremos que hacer 952 00:37:08,019 --> 00:37:10,199 nuestro service y llamar 953 00:37:10,199 --> 00:37:10,820 al método 954 00:37:10,820 --> 00:37:16,219 service.delete 955 00:37:17,400 --> 00:37:18,300 uy, no lo tenemos 956 00:37:18,300 --> 00:37:20,099 eliminar venta, pues vamos a crearlo 957 00:37:20,099 --> 00:37:20,760 en el servicio 958 00:37:20,760 --> 00:37:26,579 a ver, el código 959 00:37:26,579 --> 00:37:28,420 no es que lo esté dejando, o sea, es que 960 00:37:28,420 --> 00:37:30,219 este método doPost 961 00:37:30,219 --> 00:37:32,199 está ejecutando 962 00:37:32,199 --> 00:37:34,039 este código, pero el formulario sigue siendo 963 00:37:34,039 --> 00:37:36,119 post, lo que pasa es que no duplico el código 964 00:37:36,119 --> 00:37:37,639 en los dos sitios, porque como va a ser el mismo 965 00:37:37,639 --> 00:37:40,300 pero una cosa es el código de respuesta 966 00:37:40,300 --> 00:37:41,980 y otra cosa es como trata 967 00:37:41,980 --> 00:37:44,380 el navegador el formulario por cuestiones 968 00:37:44,380 --> 00:37:46,239 independientes 969 00:37:46,239 --> 00:37:48,079 vale, pues entonces aquí 970 00:37:48,079 --> 00:37:50,119 vamos a hacernos 971 00:37:50,119 --> 00:37:51,099 en el servicio 972 00:37:51,099 --> 00:37:55,659 en el ventaservice este 973 00:37:55,659 --> 00:37:59,500 vamos a hacernos el método que nos falta 974 00:37:59,500 --> 00:38:00,340 que es el de 975 00:38:00,340 --> 00:38:02,900 public 976 00:38:02,900 --> 00:38:05,880 vamos a 977 00:38:05,880 --> 00:38:08,440 en lugar de un void 978 00:38:08,440 --> 00:38:10,940 pues para ya usar el parámetro 979 00:38:10,940 --> 00:38:13,099 de retorno para ver si realmente se eliminó 980 00:38:13,099 --> 00:38:14,980 o no, pues vamos a 981 00:38:14,980 --> 00:38:16,840 un boolean, para yo poder devolver 982 00:38:16,840 --> 00:38:18,900 en un html, si se eliminó correctamente 983 00:38:18,900 --> 00:38:20,480 no, no se pudo eliminar, yo que sé 984 00:38:20,480 --> 00:38:22,619 pues venga 985 00:38:22,619 --> 00:38:24,679 delete venta 986 00:38:24,679 --> 00:38:26,719 delete venta que 987 00:38:26,719 --> 00:38:28,699 necesita un integer id 988 00:38:28,699 --> 00:38:31,780 y ahora este es el que me va a llamar 989 00:38:31,780 --> 00:38:36,119 directamente al dao.deleteventa by id 990 00:38:36,119 --> 00:38:37,219 vale 991 00:38:37,219 --> 00:38:39,460 que es el que tenemos que hacer 992 00:38:39,460 --> 00:38:42,780 entonces me da un error porque el deleteventa by id 993 00:38:42,780 --> 00:38:44,199 que yo había dejado planteado 994 00:38:44,199 --> 00:38:47,280 no me devolvía boolean pero lo cambiamos a boolean y ya está 995 00:38:47,280 --> 00:38:50,300 facilísimo 996 00:38:50,300 --> 00:38:54,139 venga vámonos al dao implementación 997 00:38:54,139 --> 00:38:56,739 y este deleteventa by id que estaba 998 00:38:56,739 --> 00:38:59,300 sin hacer, vamos a ponerle 999 00:38:59,300 --> 00:39:00,639 primero un boolean 1000 00:39:00,639 --> 00:39:04,980 y ahora ya si que vamos a las 1001 00:39:04,980 --> 00:39:06,760 maravillas del 1002 00:39:06,760 --> 00:39:07,860 prepare statement 1003 00:39:07,860 --> 00:39:09,920 pues venga 1004 00:39:09,920 --> 00:39:11,739 mi sentencia 1005 00:39:11,739 --> 00:39:15,760 va a ser prepare 1006 00:39:15,760 --> 00:39:17,239 statement 1007 00:39:17,239 --> 00:39:21,079 conexión 1008 00:39:21,079 --> 00:39:23,579 el objeto conexión que es 1009 00:39:23,579 --> 00:39:24,300 connection 1010 00:39:24,300 --> 00:39:27,280 connection punto 1011 00:39:27,280 --> 00:39:28,739 prepare statement 1012 00:39:28,739 --> 00:39:31,119 ahora delete 1013 00:39:31,119 --> 00:39:32,539 from 1014 00:39:32,539 --> 00:39:34,900 coches 1015 00:39:34,900 --> 00:39:37,500 creo que se llamaba la tabla 1016 00:39:37,500 --> 00:39:40,159 no, se llamaba ventas 1017 00:39:40,159 --> 00:39:41,780 coches era la base de datos 1018 00:39:41,780 --> 00:39:43,980 delete from ventas 1019 00:39:43,980 --> 00:39:44,679 where 1020 00:39:44,679 --> 00:39:47,239 id igual 1021 00:39:47,239 --> 00:39:49,739 y ahora ya si que si 1022 00:39:49,739 --> 00:39:50,360 pumba 1023 00:39:50,360 --> 00:39:53,679 interrogación, nada de concatenar y partir 1024 00:39:53,679 --> 00:39:54,340 ahí el este 1025 00:39:54,340 --> 00:39:57,760 ahora este como es un recurso que se va 1026 00:39:57,760 --> 00:39:59,639 a cerrar, pues lo meto yo en mi try 1027 00:39:59,639 --> 00:40:00,579 con recursos 1028 00:40:00,579 --> 00:40:04,920 lo meto en el try 1029 00:40:04,920 --> 00:40:06,920 con recursos este de aquí 1030 00:40:06,920 --> 00:40:10,539 y ahora ya 1031 00:40:10,539 --> 00:40:11,940 antes de ejecutar 1032 00:40:11,940 --> 00:40:14,739 el delete, tengo que fijar en los parámetros 1033 00:40:14,739 --> 00:40:16,059 pues venga 1034 00:40:16,059 --> 00:40:18,599 este solo tiene uno 1035 00:40:18,599 --> 00:40:20,739 que es entero, pues ps.set 1036 00:40:21,340 --> 00:40:22,039 int 1037 00:40:22,039 --> 00:40:24,440 la interrogación de posición 1038 00:40:24,440 --> 00:40:26,320 1, dale el valor id 1039 00:40:26,320 --> 00:40:28,760 uy, id 1040 00:40:28,760 --> 00:40:29,539 no, id 1041 00:40:29,539 --> 00:40:31,599 así 1042 00:40:31,599 --> 00:40:33,300 vale 1043 00:40:33,300 --> 00:40:35,920 que yo tengo una sentencia 1044 00:40:35,920 --> 00:40:38,420 con más interrogaciones 1045 00:40:38,420 --> 00:40:40,280 o el ID igual a no sé 1046 00:40:40,280 --> 00:40:42,500 cuántos que tienen más interrogaciones 1047 00:40:42,500 --> 00:40:43,940 por eso es un SQL gordote 1048 00:40:43,940 --> 00:40:46,380 pues voy fijando cada una 1049 00:40:46,380 --> 00:40:49,059 uno es la primera interrogación en orden de aparición 1050 00:40:49,059 --> 00:40:50,860 dos la segunda interrogación en orden de aparición 1051 00:40:50,860 --> 00:40:57,039 porque este no es una colección 1052 00:40:57,039 --> 00:40:57,539 de datos 1053 00:40:57,539 --> 00:41:00,539 lo que empieza por cero son las colecciones 1054 00:41:00,539 --> 00:41:02,360 los arrays, todo lo que es 1055 00:41:02,360 --> 00:41:03,840 Esto no son datos, en realidad. 1056 00:41:09,920 --> 00:41:12,119 Hombre, es la mejor forma de transmitir 1057 00:41:12,119 --> 00:41:14,380 aquí falta algo, ¿no? ¿Qué otro símbolo pondrías? 1058 00:41:15,699 --> 00:41:17,900 Interrogación no es porque yo lo diga, sino porque es así. 1059 00:41:21,400 --> 00:41:23,079 No, no, porque me apetece, no. 1060 00:41:23,440 --> 00:41:28,280 Porque el método prepareStateMath 1061 00:41:28,280 --> 00:41:31,380 interpreta donde hay interrogaciones 1062 00:41:31,380 --> 00:41:32,719 que tú lo vas a fijar luego. 1063 00:41:32,719 --> 00:41:35,760 Tienen que ser interrogaciones sí o sí por obligación 1064 00:41:35,760 --> 00:41:40,960 ¿A qué te refieres? 1065 00:41:41,179 --> 00:41:43,179 ¿Va a la interrogación por una X, por ejemplo? 1066 00:41:46,280 --> 00:41:47,840 Hombre, pero entonces 1067 00:41:47,840 --> 00:41:49,539 ¿No estamos haciendo una sentencia 1068 00:41:49,539 --> 00:41:51,360 Con el preparo de statement? 1069 00:41:51,800 --> 00:41:54,300 ¿Estás haciendo un statement normal a que puedes meter inyección? 1070 00:41:54,840 --> 00:41:55,760 Que no queremos eso 1071 00:41:55,760 --> 00:41:59,239 A ver, lo puedes hacer de esa manera 1072 00:41:59,239 --> 00:42:01,340 Pero tienes un código peligroso 1073 00:42:01,340 --> 00:42:03,119 Una aplicación con unos agujeros de seguridad 1074 00:42:03,119 --> 00:42:04,420 muy gordos 1075 00:42:04,420 --> 00:42:09,159 de inyecciones SQL 1076 00:42:09,159 --> 00:42:10,820 no, porque 1077 00:42:10,820 --> 00:42:12,460 esto ya se ha precompilado 1078 00:42:12,460 --> 00:42:15,159 con lo cual esto no es una concatenación tal cual 1079 00:42:15,159 --> 00:42:17,139 entonces si el usuario me mete 1080 00:42:17,139 --> 00:42:18,400 aquí un Drop Database 1081 00:42:18,400 --> 00:42:21,179 el Drop Database no encaja en ese 1082 00:42:21,179 --> 00:42:23,340 hueco, porque eso ya está precompilado 1083 00:42:23,340 --> 00:42:25,139 y él ya sabe por esa precompilación 1084 00:42:25,659 --> 00:42:27,119 que aquí tiene que ir un entero 1085 00:42:27,119 --> 00:42:29,179 entonces tú le metes algo que sea un entero 1086 00:42:29,179 --> 00:42:30,539 como un Drop Database y dice 1087 00:42:30,539 --> 00:42:33,539 uy, esto no me encaja aquí, aquí se lo ponen enteros 1088 00:42:33,539 --> 00:42:34,559 Entonces, no casa. 1089 00:42:34,679 --> 00:42:35,820 Sin embargo, con lo que tú has hecho... 1090 00:42:35,820 --> 00:42:38,639 ¿Dónde? 1091 00:42:41,039 --> 00:42:42,019 Hombre, pero es que tal vez 1092 00:42:42,019 --> 00:42:43,960 te estás tú matando a ti mismo porque tú eres 1093 00:42:43,960 --> 00:42:44,920 el que nos está escribiendo esto. 1094 00:42:45,579 --> 00:42:47,659 Si puedes cambiar de lado abajo, puedes cambiar de lado arriba. 1095 00:42:47,960 --> 00:42:48,860 No tiene sentido. 1096 00:42:49,619 --> 00:42:50,579 ¿Cómo que no tiene sentido? 1097 00:42:51,239 --> 00:42:53,039 No acabo de entender lo que me estás diciendo tú. 1098 00:42:53,500 --> 00:42:55,880 Aquí la idea, la aplicación 1099 00:42:55,880 --> 00:42:57,159 se craquea desde fuera. 1100 00:42:57,639 --> 00:42:59,199 Desde sus puntos de entrada. 1101 00:42:59,460 --> 00:43:01,900 Aquí el único punto de entrada es la interrogación. 1102 00:43:01,900 --> 00:43:02,420 No hay otro. 1103 00:43:02,420 --> 00:43:05,900 porque todo lo demás es código 1104 00:43:05,900 --> 00:43:07,159 que has escrito tú 1105 00:43:07,159 --> 00:43:13,960 en el otro, el más 1106 00:43:13,960 --> 00:43:16,039 y lo que pones aquí es un punto 1107 00:43:16,039 --> 00:43:17,679 de entrada, porque es directamente 1108 00:43:17,679 --> 00:43:20,219 el parámetro que tú metes 1109 00:43:20,219 --> 00:43:22,519 y ahí como es una concatenación 1110 00:43:22,519 --> 00:43:24,179 cuela cualquier cosa 1111 00:43:24,179 --> 00:43:25,340 porque es concatenación 1112 00:43:25,340 --> 00:43:26,960 pero aquí no estamos concatenando 1113 00:43:26,960 --> 00:43:27,940 aquí estamos 1114 00:43:27,940 --> 00:43:30,440 ¿dónde? 1115 00:43:30,440 --> 00:43:40,159 en el primer caso 1116 00:43:40,159 --> 00:43:42,880 en el primer caso 1117 00:43:42,880 --> 00:43:43,860 no te explotas 1118 00:43:43,860 --> 00:43:44,940 no te explotas 1119 00:43:44,940 --> 00:43:48,019 pero tú tienes que concatenar bien 1120 00:43:48,019 --> 00:43:49,599 si tú lo concatenas 1121 00:43:49,599 --> 00:43:51,019 podemos hacer luego un ejemplito 1122 00:43:51,019 --> 00:43:52,039 que claro que te explota 1123 00:43:52,039 --> 00:43:53,699 pero tienes que ser listo 1124 00:43:53,699 --> 00:43:58,019 y no concatenar con lo que él espera 1125 00:43:58,019 --> 00:43:59,960 y luego concatenar 1126 00:43:59,960 --> 00:44:01,619 con el procedimiento almacenado que sea 1127 00:44:01,619 --> 00:44:03,619 de los database, o sea, poner una cosa 1128 00:44:03,619 --> 00:44:05,719 SQL que concatenada 1129 00:44:05,719 --> 00:44:07,579 con lo que tú has escrito tenga sentido 1130 00:44:07,579 --> 00:44:09,239 y claro que hay posibilidades 1131 00:44:09,239 --> 00:44:13,699 ¿Cómo? 1132 00:44:15,320 --> 00:44:16,039 ¿Qué has dicho? 1133 00:44:18,840 --> 00:44:23,599 A ver, esta situación 1134 00:44:23,599 --> 00:44:24,679 de aquí arriba 1135 00:44:24,679 --> 00:44:32,219 esta 1136 00:44:32,219 --> 00:44:36,619 y poner la interrogación 1137 00:44:36,619 --> 00:44:38,820 aquí dentro, no tienen nada que ver 1138 00:44:38,820 --> 00:44:41,400 ¿por qué? 1139 00:44:42,260 --> 00:44:44,719 en esta, tú primero haces 1140 00:44:44,719 --> 00:44:45,360 un stream 1141 00:44:45,360 --> 00:44:48,679 que aquí no hay todavía ni jdbc 1142 00:44:48,679 --> 00:44:49,800 ni seguro, haces un stream 1143 00:44:49,800 --> 00:44:51,880 y ahora este stream lo haces 1144 00:44:51,880 --> 00:44:53,159 cogiendo este stream 1145 00:44:53,159 --> 00:44:56,199 y concatenándole algo que te ha metido 1146 00:44:56,199 --> 00:44:57,679 alguien en un formulario. 1147 00:44:58,780 --> 00:45:00,380 Imagínate que sea algo que te ha metido 1148 00:45:00,380 --> 00:45:01,699 alguien es uno 1149 00:45:01,699 --> 00:45:04,400 and no sé qué, and no sé 1150 00:45:04,400 --> 00:45:05,679 cuánto, punto y coma, 1151 00:45:05,800 --> 00:45:07,860 llamado de orden de almacenado. Algo 1152 00:45:07,860 --> 00:45:09,699 cuyo resultado final 1153 00:45:09,699 --> 00:45:12,179 es un script válido en SQL. 1154 00:45:13,019 --> 00:45:14,260 Bueno, pues ese 1155 00:45:14,260 --> 00:45:16,619 script válido en SQL ahora lo ejecuta 1156 00:45:16,619 --> 00:45:17,400 sin pensar. 1157 00:45:18,940 --> 00:45:20,440 Pues se hace todo lo que hay en ese 1158 00:45:20,440 --> 00:45:22,079 script. Claro, el que sea 1159 00:45:22,079 --> 00:45:24,300 tendría que hacer todas las pruebas necesarias 1160 00:45:24,300 --> 00:45:25,679 para que lo que pone aquí 1161 00:45:25,679 --> 00:45:28,059 encaje y te genera un SQL válido. 1162 00:45:28,559 --> 00:45:29,480 Pero no deja de ser 1163 00:45:29,480 --> 00:45:31,840 una prueba y error que se puede hacer y es un 1164 00:45:31,840 --> 00:45:33,780 agujero de seguridad y no es tan 1165 00:45:33,780 --> 00:45:35,940 difícil de hacer. La opción 1166 00:45:35,940 --> 00:45:37,880 la tienes abierta. Abajo es 1167 00:45:37,880 --> 00:45:40,019 imposible. Abajo es imposible 1168 00:45:40,019 --> 00:45:42,000 porque ahora cambio. Yo pongo 1169 00:45:42,000 --> 00:45:43,860 aquí una interrogación y luego 1170 00:45:43,860 --> 00:45:45,059 lo fijo con el set view. 1171 00:45:46,340 --> 00:45:47,679 Aquí, ahora ya 1172 00:45:47,679 --> 00:45:49,860 JDBC te analiza 1173 00:45:49,860 --> 00:45:51,320 esto, te hace un preanálisis 1174 00:45:51,320 --> 00:45:53,780 y te dice, vale, esto es una 1175 00:45:53,780 --> 00:45:55,760 sele y aquí tengo una cajita 1176 00:45:55,760 --> 00:45:57,699 donde solo voy a permitir que 1177 00:45:57,699 --> 00:45:59,900 entre un número entero, solo voy a permitir un número entero 1178 00:45:59,900 --> 00:46:01,880 y ese número entero lo meto 1179 00:46:01,880 --> 00:46:04,179 con setting, si tú le metes 1180 00:46:04,179 --> 00:46:05,739 aquí 1181 00:46:05,739 --> 00:46:08,539 le metes 1182 00:46:08,539 --> 00:46:10,159 algo que no sea 1183 00:46:10,159 --> 00:46:12,260 un entero, es que no te va a dejar 1184 00:46:12,260 --> 00:46:13,860 te va a decir, te va a petar 1185 00:46:13,860 --> 00:46:15,780 la aplicación, porque esto es una 1186 00:46:15,780 --> 00:46:16,980 cajita para un entero 1187 00:46:16,980 --> 00:46:20,239 sin embargo ahí es una concatenación para lo que te dé la gana 1188 00:46:20,239 --> 00:46:25,099 lo otro es lo que te dé la gana 1189 00:46:25,099 --> 00:46:26,139 el otro es una cadena 1190 00:46:26,139 --> 00:46:27,739 la cadena que tú quieras 1191 00:46:27,739 --> 00:46:30,860 pero que no te tiene 1192 00:46:30,860 --> 00:46:32,380 pero da igual 1193 00:46:32,380 --> 00:46:34,719 porque tú no verificas en ningún momento 1194 00:46:34,719 --> 00:46:36,500 que sea un íntegro, tú haces el ejecute 1195 00:46:36,500 --> 00:46:39,360 tú no verificas que sea un íntegro 1196 00:46:39,360 --> 00:46:40,659 aquí, ¿dónde estamos? 1197 00:46:43,519 --> 00:46:44,000 aquí 1198 00:46:44,000 --> 00:46:45,739 ¿en qué momento? 1199 00:46:45,980 --> 00:46:48,039 ¿en qué momento he comprometido yo 1200 00:46:48,039 --> 00:46:49,719 a que eso sea un íntegro? 1201 00:46:50,320 --> 00:46:51,260 ¿en qué momento? 1202 00:46:51,260 --> 00:46:58,159 a ver, no, pero es que esto lo ha convertido 1203 00:46:58,159 --> 00:47:00,079 a stream, yo aquí puedo meter cualquier 1204 00:47:00,079 --> 00:47:00,639 cosa 1205 00:47:00,639 --> 00:47:09,099 a ver 1206 00:47:09,099 --> 00:47:11,500 aquí en el 1207 00:47:11,500 --> 00:47:13,900 te refieres, cuando tú llamas al find by id 1208 00:47:13,900 --> 00:47:16,059 este método sí te está haciendo 1209 00:47:16,059 --> 00:47:16,780 un filtrado 1210 00:47:16,780 --> 00:47:19,280 el método sí te está haciendo un filtrado 1211 00:47:19,280 --> 00:47:20,679 pero en un caso genérico 1212 00:47:20,679 --> 00:47:22,980 esto podría ser estructurado de otra manera 1213 00:47:22,980 --> 00:47:24,920 estamos hablando de que esta sentencia 1214 00:47:24,920 --> 00:47:25,960 tiene un agujero de seguridad 1215 00:47:25,960 --> 00:47:29,199 en mi arquitectura de aplicación en concreto 1216 00:47:29,199 --> 00:47:30,599 que yo he filtrado 1217 00:47:30,599 --> 00:47:32,380 poniendo un método antes que tenga un ID 1218 00:47:32,380 --> 00:47:34,760 pues hombre, no te va 1219 00:47:34,760 --> 00:47:36,880 a compilar, pero hablo 1220 00:47:36,880 --> 00:47:39,119 en general, en general esto es un agujero de seguridad 1221 00:47:39,119 --> 00:47:40,980 porque aquí puedes concatenar con cualquier 1222 00:47:40,980 --> 00:47:41,420 cosa 1223 00:47:52,980 --> 00:47:57,699 No he entendido nada de lo que has dicho 1224 00:47:57,699 --> 00:48:00,360 Más que no lo he entendido, que no lo he oído 1225 00:48:00,360 --> 00:48:03,340 Yo es que no lo he oído 1226 00:48:03,340 --> 00:48:06,119 Pero con que lo hayáis oído y entendido vosotros es suficiente 1227 00:48:06,119 --> 00:48:09,139 Pero bueno, la idea 1228 00:48:09,139 --> 00:48:10,920 La idea está, ¿no? 1229 00:48:13,219 --> 00:48:13,619 Claro 1230 00:48:13,619 --> 00:48:16,219 O sea, que esto, jolín, es que metes lo que vas a hacer 1231 00:48:16,219 --> 00:48:19,579 Claro, bueno 1232 00:48:19,579 --> 00:48:25,380 Vale, pues ya está 1233 00:48:25,380 --> 00:48:29,639 Vale, pues 1234 00:48:29,639 --> 00:48:31,800 Bueno, pues ahora 1235 00:48:31,800 --> 00:48:32,679 Fijamos 1236 00:48:32,679 --> 00:48:33,820 ¿Quién se ha ido? 1237 00:48:39,320 --> 00:48:41,519 Vale, entonces fijamos este entero 1238 00:48:41,519 --> 00:48:42,719 Y ahora 1239 00:48:42,719 --> 00:48:44,460 Lo ejecutamos 1240 00:48:44,460 --> 00:48:49,659 como este es un delete 1241 00:48:49,659 --> 00:48:51,880 es un execute 1242 00:48:51,880 --> 00:48:52,460 update 1243 00:48:52,460 --> 00:48:53,800 ¿vale? 1244 00:48:55,800 --> 00:48:57,400 porque actualiza la base de datos 1245 00:48:57,400 --> 00:48:59,239 entonces el execute update este 1246 00:48:59,239 --> 00:49:01,139 aparte te da información 1247 00:49:01,139 --> 00:49:03,559 sobre la cantidad de registros que se han visto 1248 00:49:03,559 --> 00:49:05,500 afectados, como estamos borrando 1249 00:49:05,500 --> 00:49:06,679 por id debería ser 1 1250 00:49:06,679 --> 00:49:09,360 entonces va a ser 1 o ninguno 1251 00:49:09,360 --> 00:49:11,360 vamos a utilizar ese dato para 1252 00:49:11,360 --> 00:49:12,539 devolver el true o false 1253 00:49:12,539 --> 00:49:14,699 Entonces pues vamos a hacerle aquí 1254 00:49:14,699 --> 00:49:15,420 Yo que sé 1255 00:49:15,420 --> 00:49:18,719 Return psqtudate 1256 00:49:18,719 --> 00:49:19,579 Igual a 1 1257 00:49:19,579 --> 00:49:21,480 ¿Vale? 1258 00:49:21,980 --> 00:49:23,460 Y me va a devolver true 1259 00:49:23,460 --> 00:49:24,860 Y aquí 1260 00:49:24,860 --> 00:49:29,159 Y aquí 1261 00:49:29,159 --> 00:49:31,039 Return 1262 00:49:31,039 --> 00:49:31,980 ¿Vale? 1263 00:49:35,789 --> 00:49:36,789 Y aquí 1264 00:49:36,789 --> 00:49:38,989 Falses 1265 00:49:38,989 --> 00:49:42,409 Si no ha salido por aquí 1266 00:49:42,409 --> 00:49:44,130 Es porque 1267 00:49:44,130 --> 00:49:52,269 Bueno, a ver, es que es por ID 1268 00:49:52,269 --> 00:49:53,130 Entonces 1269 00:49:53,130 --> 00:49:57,550 Retún falso, vale 1270 00:49:57,550 --> 00:50:00,369 Y aquí esto es por el catch 1271 00:50:00,369 --> 00:50:00,789 ¿Verdad? 1272 00:50:05,789 --> 00:50:07,750 Ah, en el venta dao, efectivamente 1273 00:50:07,750 --> 00:50:09,769 Vale, en el venta dao 1274 00:50:09,769 --> 00:50:11,269 Que lo tengo abierto en algún sitio 1275 00:50:11,269 --> 00:50:13,650 En el venta dao 1276 00:50:13,650 --> 00:50:17,269 Sí, el venta dado 1277 00:50:17,269 --> 00:50:19,110 Lo tengo 1278 00:50:19,110 --> 00:50:20,650 El venta dado lo tenía con voy 1279 00:50:20,650 --> 00:50:21,409 Divertidamente 1280 00:50:21,409 --> 00:50:24,110 Vale 1281 00:50:24,110 --> 00:50:27,610 Venga, venta dado, me devuelve un boolean 1282 00:50:27,610 --> 00:50:30,250 Venta dado, implementación 1283 00:50:30,250 --> 00:50:32,170 Ahora ya sí 1284 00:50:32,170 --> 00:50:33,750 Me dice que añada el catch 1285 00:50:33,750 --> 00:50:36,010 Añadimos el catch 1286 00:50:36,010 --> 00:50:37,250 Vale 1287 00:50:37,250 --> 00:50:40,309 Y ahora me borra 1288 00:50:40,309 --> 00:50:41,130 Si lo 1289 00:50:41,130 --> 00:50:43,690 El resultado es igual a uno 1290 00:50:43,690 --> 00:50:44,670 Sale por aquí 1291 00:50:44,670 --> 00:50:52,429 Y ya está 1292 00:50:52,429 --> 00:50:53,909 Y si sale por el catch 1293 00:50:53,909 --> 00:50:55,150 Pues falso 1294 00:50:55,150 --> 00:50:57,969 Venga, delete venta está 1295 00:50:57,969 --> 00:50:59,650 Y ahora ya 1296 00:50:59,650 --> 00:51:01,949 Nuestro serlet 1297 00:51:01,949 --> 00:51:02,570 Que estaba 1298 00:51:02,570 --> 00:51:05,409 Vale, a ver 1299 00:51:05,409 --> 00:51:07,630 ¿Os parece si le digo que lo retrasamos un poco? 1300 00:51:07,630 --> 00:51:08,949 No, no, no 1301 00:51:08,949 --> 00:51:13,309 Lo que pasa es que le tengo que decir 1302 00:51:13,309 --> 00:51:14,630 Que baje a 1303 00:51:14,630 --> 00:51:16,190 Firmar mi guardia