[{"data":1,"prerenderedAt":939},["ShallowReactive",2],{"navigation_docs":3,"-datos-crud":298,"-datos-crud-surround":934},[4,18,70,105,149,178,212,257],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"path":20,"stem":21,"children":22,"icon":25},"Interfaz Gráfica de Usuario","\u002Fgui","2.gui\u002F01.index",[23,26,30,34,38,42,46,50,54,58,62,66],{"title":24,"path":20,"stem":21,"icon":25},"¿Qué es una Interfaz Gráfica de Usuario (GUI)?","i-carbon-gui-management",{"title":27,"path":28,"stem":29,"icon":25},"Creación de Interfaces Gráficas de Usuario (GUI)","\u002Fgui\u002Fbuild-gui","2.gui\u002F02.build-gui",{"title":31,"path":32,"stem":33,"icon":25},"Componentes Básicos de Swing","\u002Fgui\u002Fcomponentes-basicos","2.gui\u002F03.componentes-basicos",{"title":35,"path":36,"stem":37},"El componente JFrame","\u002Fgui\u002Fjframe","2.gui\u002F04.jframe",{"title":39,"path":40,"stem":41},"El componente JPanel","\u002Fgui\u002Fjpanel","2.gui\u002F05.jpanel",{"title":43,"path":44,"stem":45},"El componente JButton","\u002Fgui\u002Fjbutton","2.gui\u002F06.jbutton",{"title":47,"path":48,"stem":49,"icon":25},"Elementos de texto en interfaces gráficas con Swing","\u002Fgui\u002Ftext","2.gui\u002F07.text",{"title":51,"path":52,"stem":53},"Elementos Visuales","\u002Fgui\u002Felementos-visuales","2.gui\u002F08.elementos-visuales",{"title":55,"path":56,"stem":57,"icon":25},"Eventos en Swing","\u002Fgui\u002Feventos","2.gui\u002F09.eventos",{"title":59,"path":60,"stem":61,"icon":25},"Controles en Swing","\u002Fgui\u002Fcontroles","2.gui\u002F10.controles",{"title":63,"path":64,"stem":65,"icon":25},"Atributos Comunes de los Componentes de Diseño","\u002Fgui\u002Fatributos-comunes","2.gui\u002F11.atributos-comunes",{"title":67,"path":68,"stem":69,"icon":25},"Layouts","\u002Fgui\u002Flayout","2.gui\u002F12.layout",{"title":71,"icon":25,"path":72,"stem":73,"children":74,"page":104},"Personalización","\u002Fpersonalizacion","3.personalizacion",[75,79,84,88,92,96,100],{"title":76,"path":77,"stem":78},"Jerarquía de clases en Swing","\u002Fpersonalizacion\u002Fjerarquia","3.personalizacion\u002F01.jerarquia",{"title":80,"path":81,"stem":82,"icon":83},"Personalización Inicial de Componentes Swing","\u002Fpersonalizacion\u002Fpersonalizacion-inicial","3.personalizacion\u002F02.personalizacion-inicial","i-carbon-palette",{"title":85,"path":86,"stem":87,"icon":83},"Tema y Personalización Avanzada en Swing","\u002Fpersonalizacion\u002Ftheme","3.personalizacion\u002F03.theme",{"title":89,"path":90,"stem":91,"icon":83},"Pintando en Swing","\u002Fpersonalizacion\u002Fpaint","3.personalizacion\u002F04.paint",{"title":93,"path":94,"stem":95,"icon":83},"Mi Tema 1: Comenzando con la Personalización","\u002Fpersonalizacion\u002Ftheme-start","3.personalizacion\u002F05.theme-start",{"title":97,"path":98,"stem":99,"icon":83},"UI Delegates: Personalizando la Apariencia de los Componentes","\u002Fpersonalizacion\u002Fui-delegates","3.personalizacion\u002F06.ui-delegates",{"title":101,"path":102,"stem":103,"icon":83},"Empleado delegadores de UI para personalizar la apariencia de los componentes","\u002Fpersonalizacion\u002Ftheme-02","3.personalizacion\u002F07.theme-02",false,{"title":106,"path":107,"stem":108,"children":109,"icon":148},"Programación concurrente","\u002Fconcurrencia","4.concurrencia\u002F01.index",[110,112,116,120,124,128,132,136,140,144],{"title":111,"path":107,"stem":108,"icon":83},"¿Qué es la concurrencia?",{"title":113,"path":114,"stem":115,"icon":83},"Unidades de Ejecución","\u002Fconcurrencia\u002Funidades-ejecucion","4.concurrencia\u002F02.unidades-ejecucion",{"title":117,"path":118,"stem":119,"icon":83},"Programa de flujo único y de flujo múltiple","\u002Fconcurrencia\u002Fflujos","4.concurrencia\u002F03.flujos",{"title":121,"path":122,"stem":123,"icon":83},"Hilos con Thread y Runnable","\u002Fconcurrencia\u002Fthread-runnable","4.concurrencia\u002F04.thread-runnable",{"title":125,"path":126,"stem":127},"Paralelismo V.S. Concurrencia","\u002Fconcurrencia\u002Fparalelismo","4.concurrencia\u002F05.paralelismo",{"title":129,"path":130,"stem":131,"icon":83},"Problemas clásicos de concurrencia","\u002Fconcurrencia\u002Fproblemas","4.concurrencia\u002F06.problemas",{"title":133,"path":134,"stem":135,"icon":83},"Emulando condiciones de carrera en Java","\u002Fconcurrencia\u002Fcondiciones-carrera","4.concurrencia\u002F07.condiciones-carrera",{"title":137,"path":138,"stem":139,"icon":83},"Semáforos en Java","\u002Fconcurrencia\u002Fsemaforos","4.concurrencia\u002F08.semaforos",{"title":141,"path":142,"stem":143,"icon":83},"La clase Timer en Java Swing","\u002Fconcurrencia\u002Ftimer","4.concurrencia\u002F09.timer",{"title":145,"path":146,"stem":147,"icon":83},"Algoritmos de ordenamiento de procesos","\u002Fconcurrencia\u002Falgoritmos-procesos","4.concurrencia\u002F10.algoritmos-procesos","i-carbon-parallel-groups",{"title":150,"path":151,"stem":152,"children":153,"icon":177},"Acceso a datos","\u002Fdatos","5.datos\u002F01.index",[154,157,161,165,169,173],{"title":155,"path":151,"stem":152,"icon":156},"Java y las bases de datos","i-carbon-database",{"title":158,"path":159,"stem":160},"Cliente Servidor","\u002Fdatos\u002Fcliente-servidor","5.datos\u002F02.cliente-servidor",{"title":162,"path":163,"stem":164},"CRUD","\u002Fdatos\u002Fcrud","5.datos\u002F03.crud",{"title":166,"path":167,"stem":168},"Sentencias Preparadas con JDBC","\u002Fdatos\u002Fsentencia-preparada","5.datos\u002F04.sentencia-preparada",{"title":170,"path":171,"stem":172},"DAO (Data Access Object)","\u002Fdatos\u002Fdao","5.datos\u002F05.dao",{"title":174,"path":175,"stem":176},"Usando Hibernate ORM","\u002Fdatos\u002Form","5.datos\u002F06.orm","i-gravity-ui-database-fill",{"title":179,"path":180,"stem":181,"children":182,"icon":211},"Programación móvil","\u002Fmovil","6.movil\u002F01.index",[183,186,191,195,199,203,207],{"title":184,"path":180,"stem":181,"icon":185},"¿Qué es Android y Kotlin?","i-carbon-mobile",{"title":187,"path":188,"stem":189,"icon":190},"¿Qué es Android Studio?","\u002Fmovil\u002Fandroid-studio","6.movil\u002F02.android-studio","i-carbon-application",{"title":192,"path":193,"stem":194,"icon":190},"¿Qué es Jetpack Compose?","\u002Fmovil\u002Fjetpack-compose","6.movil\u002F03.jetpack-compose",{"title":196,"path":197,"stem":198},"Filas y Columnas con Jetpack Compose","\u002Fmovil\u002Ffilas-columnas","6.movil\u002F04.filas-columnas",{"title":200,"path":201,"stem":202,"icon":190},"Componentes Básicos en Jetpack Compose","\u002Fmovil\u002Fcomponentes-basicos","6.movil\u002F05.componentes-basicos",{"title":204,"path":205,"stem":206,"icon":190},"Las Intenciones en Android con Jetpack Compose","\u002Fmovil\u002Fintentions","6.movil\u002F06.intentions",{"title":208,"path":209,"stem":210,"icon":190},"Navegación en Android con Jetpack Compose","\u002Fmovil\u002Fnavegacion","6.movil\u002F07.navegacion","phone_android",{"title":213,"icon":25,"path":214,"stem":215,"children":216,"page":104},"Ejemplos","\u002Fejemplos","7.ejemplos",[217,221,225,229,233,237,241,245,249,253],{"title":218,"path":219,"stem":220},"Ejemplo 01: Creando un validador abstracto de expresiones","\u002Fejemplos\u002Fejemplo-01","7.ejemplos\u002F01.ejemplo-01",{"title":222,"path":223,"stem":224},"Ejemplo 02: Diferencias de validar un JTextField y un JFormattedTextField","\u002Fejemplos\u002Fejemplo-02","7.ejemplos\u002F02.ejemplo-02",{"title":226,"path":227,"stem":228},"Ejemplo 03: Creando una Aplicación con GUI en Java Swing","\u002Fejemplos\u002Fejemplo-03","7.ejemplos\u002F03.ejemplo-03",{"title":230,"path":231,"stem":232},"Ejemplo 4: Estilizando componentes Swing con Delegadores","\u002Fejemplos\u002Fejemplo-04","7.ejemplos\u002F04.ejemplo-04",{"title":234,"path":235,"stem":236,"icon":83},"Ejemplo 5: Uso de Hilos con Thread y Runnable","\u002Fejemplos\u002Fejemplo-05","7.ejemplos\u002F05.ejemplo-05",{"title":238,"path":239,"stem":240,"icon":83},"Ejemplo 06: Manejando Hilos de formas Diferentes en Java","\u002Fejemplos\u002Fejemplo-06","7.ejemplos\u002F06.ejemplo-06",{"title":242,"path":243,"stem":244,"icon":83},"Ejemplo 7: Condiciones de carrera en Java","\u002Fejemplos\u002Fejemplo-07","7.ejemplos\u002F07.ejemplo-07",{"title":246,"path":247,"stem":248,"icon":83},"Ejemplo 8: Control de acceso a recursos compartidos con semáforos","\u002Fejemplos\u002Fejemplo-08","7.ejemplos\u002F08.ejemplo-08",{"title":250,"path":251,"stem":252,"icon":83},"Ejemplo 9: El restaurante y los pedidos","\u002Fejemplos\u002Fejemplo-09","7.ejemplos\u002F09.ejemplo-09",{"title":254,"path":255,"stem":256},"Ejemplo 10: Proceso FIFO (First In, First Out) con Semáforos y Swing","\u002Fejemplos\u002Fejemplo-10","7.ejemplos\u002F10.ejemplo-10",{"title":258,"icon":25,"path":259,"stem":260,"children":261,"page":104},"Actividades","\u002Factividades","8.actividades",[262,266,270,274,278,282,286,290,294],{"title":263,"path":264,"stem":265,"icon":25},"Actividad 1: Introducción al diseño de interfaces","\u002Factividades\u002Fact-01","8.actividades\u002F01.act-01",{"title":267,"path":268,"stem":269,"icon":25},"Actividad 2: Diseño de wireframes y prototipos","\u002Factividades\u002Fact-02","8.actividades\u002F02.act-02",{"title":271,"path":272,"stem":273,"icon":25},"Actividad 3: Propuesta de Proyecto y Wireframe inicial","\u002Factividades\u002Fact-03","8.actividades\u002F03.act-03",{"title":275,"path":276,"stem":277,"icon":83},"Actividad 4: Temas y Componentes Personalizados en Swing","\u002Factividades\u002Fact-04","8.actividades\u002F04.act-04",{"title":279,"path":280,"stem":281,"icon":83},"Actividad 5: Explicando la Concurrencia a un Niño de 5 Años","\u002Factividades\u002Fact-05","8.actividades\u002F05.act-05",{"title":283,"path":284,"stem":285,"icon":83},"Actividad 6: Simulación de una cocina con múltiples chefs (hilos)","\u002Factividades\u002Fact-06","8.actividades\u002F06.act-06",{"title":287,"path":288,"stem":289,"icon":83},"Actividad 7: Sistema de retiro bancario","\u002Factividades\u002Fact-07","8.actividades\u002F07.act-07",{"title":291,"path":292,"stem":293,"icon":83},"Actividad 8: Simulación de Round Robin con hilos e Interfaz Gráfica","\u002Factividades\u002Fact-08","8.actividades\u002F08.act-08",{"title":295,"path":296,"stem":297,"icon":83},"Actividad 9: CRUD con Hibernate y Swing","\u002Factividades\u002Fact-09","8.actividades\u002F09.act-09",{"id":299,"title":162,"body":300,"description":927,"extension":928,"links":929,"meta":930,"navigation":931,"path":163,"seo":932,"stem":164,"__hash__":933},"docs\u002F5.datos\u002F03.crud.md",{"type":301,"value":302,"toc":916},"minimark",[303,308,312,316,319,324,476,480,643,647,756,760,852,856,905,909,912],[304,305,307],"h2",{"id":306},"qué-es-crud","¿Qué es CRUD?",[309,310,311],"p",{},"CRUD es un acrónimo que representa las cuatro operaciones básicas que se pueden realizar en una base de datos: Crear (Create), Leer (Read), Actualizar (Update) y Eliminar (Delete). Estas operaciones son fundamentales para la gestión de datos en aplicaciones de software y permiten a los usuarios interactuar con la información almacenada en una base de datos.",[304,313,315],{"id":314},"operaciones-crud-en-java-con-jdbc","Operaciones CRUD en Java con JDBC",[309,317,318],{},"Para realizar operaciones CRUD en una base de datos utilizando Java y JDBC, debes seguir los pasos para establecer una conexión a la base de datos, crear declaraciones SQL para cada operación y ejecutar esas declaraciones. A continuación, se presentan ejemplos de código para cada operación CRUD.",[320,321,323],"h3",{"id":322},"crear-create","Crear (Create)",[325,326,331],"pre",{"className":327,"code":328,"language":329,"meta":330,"style":330},"language-java shiki shiki-themes github-dark","String sqlInsert = \"INSERT INTO users (name, email) VALUES (?, ?)\";\nPreparedStatement preparedStatement = connection.prepareStatement(sqlInsert);\npreparedStatement.setString(1, \"John Doe\");\npreparedStatement.setString(2, \"Ann Smith\");\nint rowsInserted = preparedStatement.executeUpdate();\nif (rowsInserted > 0) {\n    IO.println(\"A new user was inserted successfully!\");\n}\n","java","",[332,333,334,354,372,397,416,436,454,470],"code",{"__ignoreMap":330},[335,336,339,343,347,351],"span",{"class":337,"line":338},"line",1,[335,340,342],{"class":341},"s95oV","String sqlInsert ",[335,344,346],{"class":345},"snl16","=",[335,348,350],{"class":349},"sU2Wk"," \"INSERT INTO users (name, email) VALUES (?, ?)\"",[335,352,353],{"class":341},";\n",[335,355,357,360,362,365,369],{"class":337,"line":356},2,[335,358,359],{"class":341},"PreparedStatement preparedStatement ",[335,361,346],{"class":345},[335,363,364],{"class":341}," connection.",[335,366,368],{"class":367},"svObZ","prepareStatement",[335,370,371],{"class":341},"(sqlInsert);\n",[335,373,375,378,381,384,388,391,394],{"class":337,"line":374},3,[335,376,377],{"class":341},"preparedStatement.",[335,379,380],{"class":367},"setString",[335,382,383],{"class":341},"(",[335,385,387],{"class":386},"sDLfK","1",[335,389,390],{"class":341},", ",[335,392,393],{"class":349},"\"John Doe\"",[335,395,396],{"class":341},");\n",[335,398,400,402,404,406,409,411,414],{"class":337,"line":399},4,[335,401,377],{"class":341},[335,403,380],{"class":367},[335,405,383],{"class":341},[335,407,408],{"class":386},"2",[335,410,390],{"class":341},[335,412,413],{"class":349},"\"Ann Smith\"",[335,415,396],{"class":341},[335,417,419,422,425,427,430,433],{"class":337,"line":418},5,[335,420,421],{"class":345},"int",[335,423,424],{"class":341}," rowsInserted ",[335,426,346],{"class":345},[335,428,429],{"class":341}," preparedStatement.",[335,431,432],{"class":367},"executeUpdate",[335,434,435],{"class":341},"();\n",[335,437,439,442,445,448,451],{"class":337,"line":438},6,[335,440,441],{"class":345},"if",[335,443,444],{"class":341}," (rowsInserted ",[335,446,447],{"class":345},">",[335,449,450],{"class":386}," 0",[335,452,453],{"class":341},") {\n",[335,455,457,460,463,465,468],{"class":337,"line":456},7,[335,458,459],{"class":341},"    IO.",[335,461,462],{"class":367},"println",[335,464,383],{"class":341},[335,466,467],{"class":349},"\"A new user was inserted successfully!\"",[335,469,396],{"class":341},[335,471,473],{"class":337,"line":472},8,[335,474,475],{"class":341},"}\n",[320,477,479],{"id":478},"leer-read","Leer (Read)",[325,481,483],{"className":327,"code":482,"language":329,"meta":330,"style":330},"String sqlSelect = \"SELECT * FROM users\";\nStatement statement = connection.createStatement();\nResultSet resultSet = statement.executeQuery(sqlSelect);\nwhile (resultSet.next()) {\n    int id = resultSet.getInt(\"id\");\n    String name = resultSet.getString(\"name\");\n    String email = resultSet.getString(\"email\");\n    IO.println(\"ID: \" + id + \", Name: \" + name + \", Email: \" + email);\n}\n",[332,484,485,497,511,527,541,564,583,601,638],{"__ignoreMap":330},[335,486,487,490,492,495],{"class":337,"line":338},[335,488,489],{"class":341},"String sqlSelect ",[335,491,346],{"class":345},[335,493,494],{"class":349}," \"SELECT * FROM users\"",[335,496,353],{"class":341},[335,498,499,502,504,506,509],{"class":337,"line":356},[335,500,501],{"class":341},"Statement statement ",[335,503,346],{"class":345},[335,505,364],{"class":341},[335,507,508],{"class":367},"createStatement",[335,510,435],{"class":341},[335,512,513,516,518,521,524],{"class":337,"line":374},[335,514,515],{"class":341},"ResultSet resultSet ",[335,517,346],{"class":345},[335,519,520],{"class":341}," statement.",[335,522,523],{"class":367},"executeQuery",[335,525,526],{"class":341},"(sqlSelect);\n",[335,528,529,532,535,538],{"class":337,"line":399},[335,530,531],{"class":345},"while",[335,533,534],{"class":341}," (resultSet.",[335,536,537],{"class":367},"next",[335,539,540],{"class":341},"()) {\n",[335,542,543,546,549,551,554,557,559,562],{"class":337,"line":418},[335,544,545],{"class":345},"    int",[335,547,548],{"class":341}," id ",[335,550,346],{"class":345},[335,552,553],{"class":341}," resultSet.",[335,555,556],{"class":367},"getInt",[335,558,383],{"class":341},[335,560,561],{"class":349},"\"id\"",[335,563,396],{"class":341},[335,565,566,569,571,573,576,578,581],{"class":337,"line":438},[335,567,568],{"class":341},"    String name ",[335,570,346],{"class":345},[335,572,553],{"class":341},[335,574,575],{"class":367},"getString",[335,577,383],{"class":341},[335,579,580],{"class":349},"\"name\"",[335,582,396],{"class":341},[335,584,585,588,590,592,594,596,599],{"class":337,"line":456},[335,586,587],{"class":341},"    String email ",[335,589,346],{"class":345},[335,591,553],{"class":341},[335,593,575],{"class":367},[335,595,383],{"class":341},[335,597,598],{"class":349},"\"email\"",[335,600,396],{"class":341},[335,602,603,605,607,609,612,615,617,620,623,625,628,630,633,635],{"class":337,"line":472},[335,604,459],{"class":341},[335,606,462],{"class":367},[335,608,383],{"class":341},[335,610,611],{"class":349},"\"ID: \"",[335,613,614],{"class":345}," +",[335,616,548],{"class":341},[335,618,619],{"class":345},"+",[335,621,622],{"class":349}," \", Name: \"",[335,624,614],{"class":345},[335,626,627],{"class":341}," name ",[335,629,619],{"class":345},[335,631,632],{"class":349}," \", Email: \"",[335,634,614],{"class":345},[335,636,637],{"class":341}," email);\n",[335,639,641],{"class":337,"line":640},9,[335,642,475],{"class":341},[320,644,646],{"id":645},"actualizar-update","Actualizar (Update)",[325,648,650],{"className":327,"code":649,"language":329,"meta":330,"style":330},"String sqlUpdate = \"UPDATE users SET email = ? WHERE id = ?\";\nPreparedStatement preparedStatement = connection.prepareStatement(sqlUpdate);\npreparedStatement.setString(1, \"Lenna Smith\");\npreparedStatement.setInt(2, 1);\nint rowsUpdated = preparedStatement.executeUpdate();\nif (rowsUpdated > 0) {\n    IO.println(\"An existing user was updated successfully!\");\n}\n",[332,651,652,664,677,694,711,726,739,752],{"__ignoreMap":330},[335,653,654,657,659,662],{"class":337,"line":338},[335,655,656],{"class":341},"String sqlUpdate ",[335,658,346],{"class":345},[335,660,661],{"class":349}," \"UPDATE users SET email = ? WHERE id = ?\"",[335,663,353],{"class":341},[335,665,666,668,670,672,674],{"class":337,"line":356},[335,667,359],{"class":341},[335,669,346],{"class":345},[335,671,364],{"class":341},[335,673,368],{"class":367},[335,675,676],{"class":341},"(sqlUpdate);\n",[335,678,679,681,683,685,687,689,692],{"class":337,"line":374},[335,680,377],{"class":341},[335,682,380],{"class":367},[335,684,383],{"class":341},[335,686,387],{"class":386},[335,688,390],{"class":341},[335,690,691],{"class":349},"\"Lenna Smith\"",[335,693,396],{"class":341},[335,695,696,698,701,703,705,707,709],{"class":337,"line":399},[335,697,377],{"class":341},[335,699,700],{"class":367},"setInt",[335,702,383],{"class":341},[335,704,408],{"class":386},[335,706,390],{"class":341},[335,708,387],{"class":386},[335,710,396],{"class":341},[335,712,713,715,718,720,722,724],{"class":337,"line":418},[335,714,421],{"class":345},[335,716,717],{"class":341}," rowsUpdated ",[335,719,346],{"class":345},[335,721,429],{"class":341},[335,723,432],{"class":367},[335,725,435],{"class":341},[335,727,728,730,733,735,737],{"class":337,"line":438},[335,729,441],{"class":345},[335,731,732],{"class":341}," (rowsUpdated ",[335,734,447],{"class":345},[335,736,450],{"class":386},[335,738,453],{"class":341},[335,740,741,743,745,747,750],{"class":337,"line":456},[335,742,459],{"class":341},[335,744,462],{"class":367},[335,746,383],{"class":341},[335,748,749],{"class":349},"\"An existing user was updated successfully!\"",[335,751,396],{"class":341},[335,753,754],{"class":337,"line":472},[335,755,475],{"class":341},[320,757,759],{"id":758},"eliminar-delete","Eliminar (Delete)",[325,761,763],{"className":327,"code":762,"language":329,"meta":330,"style":330},"String sqlDelete = \"DELETE FROM users WHERE id = ?\";\nPreparedStatement preparedStatement = connection.prepareStatement(sqlDelete);\npreparedStatement.setInt(1, 1);\nint rowsDeleted = preparedStatement.executeUpdate();    \nif (rowsDeleted > 0) {\n    IO.println(\"A user was deleted successfully!\");\n}\n",[332,764,765,777,790,806,822,835,848],{"__ignoreMap":330},[335,766,767,770,772,775],{"class":337,"line":338},[335,768,769],{"class":341},"String sqlDelete ",[335,771,346],{"class":345},[335,773,774],{"class":349}," \"DELETE FROM users WHERE id = ?\"",[335,776,353],{"class":341},[335,778,779,781,783,785,787],{"class":337,"line":356},[335,780,359],{"class":341},[335,782,346],{"class":345},[335,784,364],{"class":341},[335,786,368],{"class":367},[335,788,789],{"class":341},"(sqlDelete);\n",[335,791,792,794,796,798,800,802,804],{"class":337,"line":374},[335,793,377],{"class":341},[335,795,700],{"class":367},[335,797,383],{"class":341},[335,799,387],{"class":386},[335,801,390],{"class":341},[335,803,387],{"class":386},[335,805,396],{"class":341},[335,807,808,810,813,815,817,819],{"class":337,"line":399},[335,809,421],{"class":345},[335,811,812],{"class":341}," rowsDeleted ",[335,814,346],{"class":345},[335,816,429],{"class":341},[335,818,432],{"class":367},[335,820,821],{"class":341},"();    \n",[335,823,824,826,829,831,833],{"class":337,"line":418},[335,825,441],{"class":345},[335,827,828],{"class":341}," (rowsDeleted ",[335,830,447],{"class":345},[335,832,450],{"class":386},[335,834,453],{"class":341},[335,836,837,839,841,843,846],{"class":337,"line":438},[335,838,459],{"class":341},[335,840,462],{"class":367},[335,842,383],{"class":341},[335,844,845],{"class":349},"\"A user was deleted successfully!\"",[335,847,396],{"class":341},[335,849,850],{"class":337,"line":456},[335,851,475],{"class":341},[304,853,855],{"id":854},"mejores-prácticas-para-manejar-conexiones-a-la-base-de-datos","Mejores prácticas para manejar conexiones a la base de datos",[857,858,859,867,873,887,893,899],"ol",{},[860,861,862,866],"li",{},[863,864,865],"strong",{},"Usar try-with-resources",": Utiliza la declaración try-with-resources para asegurarte de que las conexiones, declaraciones y result sets se cierren automáticamente, incluso si ocurre una excepción.",[860,868,869,872],{},[863,870,871],{},"Manejar excepciones",": Asegúrate de manejar las excepciones de manera adecuada para evitar que tu aplicación se bloquee y para proporcionar información útil sobre los errores.",[860,874,875,878,879,882,883,886],{},[863,876,877],{},"Usar PreparedStatement",": Utiliza ",[332,880,881],{},"PreparedStatement"," en lugar de ",[332,884,885],{},"Statement"," para evitar ataques de inyección SQL y mejorar el rendimiento al reutilizar las declaraciones preparadas.",[860,888,889,892],{},[863,890,891],{},"Cerrar recursos",": Siempre cierra las conexiones, declaraciones y result sets después de usarlos para liberar recursos y evitar fugas de memoria.",[860,894,895,898],{},[863,896,897],{},"Configurar el pool de conexiones",": Considera usar un pool de conexiones para mejorar el rendimiento de tu aplicación al reutilizar conexiones a la base de datos en lugar de abrir y cerrar conexiones repetidamente.",[860,900,901,904],{},[863,902,903],{},"Validar entradas",": Asegúrate de validar las entradas del usuario antes de usarlas en consultas SQL para evitar errores y mejorar la seguridad de tu aplicación.",[304,906,908],{"id":907},"conclusión","Conclusión",[309,910,911],{},"Realizar operaciones CRUD en una base de datos es esencial para la gestión de datos en aplicaciones de software. Utilizando Java y JDBC, puedes implementar estas operaciones de manera eficiente y segura siguiendo las mejores prácticas para manejar conexiones a la base de datos y gestionar los recursos. Al dominar las operaciones CRUD, podrás crear aplicaciones que interactúen con bases de datos de manera efectiva y proporcionen una experiencia de usuario sólida.",[913,914,915],"style",{},"html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":330,"searchDepth":356,"depth":356,"links":917},[918,919,925,926],{"id":306,"depth":356,"text":307},{"id":314,"depth":356,"text":315,"children":920},[921,922,923,924],{"id":322,"depth":374,"text":323},{"id":478,"depth":374,"text":479},{"id":645,"depth":374,"text":646},{"id":758,"depth":374,"text":759},{"id":854,"depth":356,"text":855},{"id":907,"depth":356,"text":908},"En este artículo se explicará cómo realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en una base de datos utilizando Java y JDBC. Se proporcionarán ejemplos de código para cada operación, así como mejores prácticas para manejar las conexiones a la base de datos y gestionar los recursos de manera eficiente.","md",null,{"editButton":104},true,{"title":162,"description":927},"DNnWgoUB4AdMDodCm8LOhNiEHBRmeKF_Uab_3_2wM9Y",[935,937],{"title":158,"path":159,"stem":160,"description":936,"children":-1},"En este artículo se explicará el modelo cliente-servidor, que es una arquitectura de red en la que los clientes solicitan servicios o recursos a un servidor centralizado. Se discutirán los conceptos clave, las ventajas y desventajas de este modelo, así como ejemplos de su aplicación en el mundo real.",{"title":166,"path":167,"stem":168,"description":938,"children":-1},"En este artículo se explicará cómo utilizar sentencias preparadas (Prepared Statements) en Java con JDBC para ejecutar consultas SQL de manera más eficiente y segura. Se discutirán las ventajas de las sentencias preparadas, cómo implementarlas en tu código Java y se proporcionarán ejemplos prácticos.",1775101373731]