@@ -129,25 +129,33 @@ El código tiene dos aspectos:
129129 + Las ejecutamos usando el método ``executeUpdate ``, puesto que su función es
130130 modificar el contenido de la base de datos, no obtener información.
131131
132- Tampoco las sentencias de inserción devuelven resultados, por lo que también
132+ Tampoco las sentencias de inserción devuelven resultados, por lo que supuesto
133+ que hayamos definido la clase ``Centro ``:
134+
135+ .. literalinclude :: files/CentroS.java
136+ :language: java
137+ :class: toggle
138+ :caption: Centro.java
139+
133140podemos hacer:
134141
135142.. code-block :: java
136143 : name: ej- insert- sin- par
137144
138- // Agregamos algunos centros
145+ // Estos son los INSERT que quedaron pendientes en el código anterior
139146 stmt. executeUpdate(" INSERT INTO Centro VALUES (11004866, 'IES Castillo de Luna', 'pública')" );
140147
141- Object [] registros = new Object [][] {
142- new Object [] {11007533 , " IES Arroyo Hondo" , " pública" },
143- new Object [] {11701164 , " IES Astaroth" , " pública" }
144- };
148+ Centro [] centros = new Centro [] {
149+ new Centro (11007533 , " IES Arroyo Hondo" , " pública" ),
150+ new Centro (11701164 , " IES Astaroth" , " pública" )
151+ }
152+
145153 String sqlString = " INSERT INTO Centro VALUES (%d, '%s', '%s');"
146- for (Object [] registro : registros ) {
154+ for (Centro centro : centros ) {
147155 stmt. executeUpdate(String . format(sqlString,
148- ( Integer ) registro[ 0 ] ,
149- ( String ) registro[ 1 ] ,
150- ( String ) registro[ 2 ]
156+ centro . getId() ,
157+ centro . getNombre() ,
158+ centro . getTitularidad()
151159 ));
152160 }
153161
@@ -191,29 +199,22 @@ objeto |ResultSet| que se va consumiendo a medida que obtenemos registros de él
191199
192200En el ejemplo, nos hemos limitado a imprimirlos, pero si nuestro programa
193201pretendiera hacer algo útil, tendríamos que trasladar esta información al modelo
194- de objetos de Java, Por ejemplo, suponiendo que hubiéramos definido una clase
195- ``Centro `` así:
196-
197- .. literalinclude :: files/CentroS.java
198- :language: java
199- :class: toggle
200- :caption: Centro.java
201-
202- podríamos hacer esto:
202+ de objetos de Java, Por ejemplo, podríamos hacer esto:
203203
204204.. code-block :: java
205205
206206
207+ Lista<Centro > centros = null ;
207208 try (ResultSet rs = stmt. executeQuery(" SELECT * FROM Centro" )) {
208- List< Centro > centros = new ArrayList<> ();
209-
210- while (rs. next()) {
211- int id = rs. getInt(" id" );
212- String nombre = rs. getString(" nombre" );
213- String titularidad = rs. getString(" titularidad" );
214- // Posiblemente titularidad debería ser un enum.
215- centros. add(new Centros (id, nombre, titularidad));
216- }
209+ centros = new ArrayList<> ();
210+
211+ while (rs. next()) {
212+ int id = rs. getInt(" id" );
213+ String nombre = rs. getString(" nombre" );
214+ String titularidad = rs. getString(" titularidad" );
215+ // Posiblemente titularidad debería ser un enum.
216+ centros. add(new Centro (id, nombre, titularidad));
217+ }
217218 }
218219
219220 .. important :: Obsérvese que tiene que ser el programador el que traduzca el modelo
@@ -249,19 +250,19 @@ mecanismo para parametrizar sentencias; y, en el caso de |JDBC|, se hace uso de
249250 : name: ej- insert- par
250251 : emphasize- lines: 8 , 11 - 13
251252
252- Object [] registros = new Object [] [] {
253- new Object [] { 11004866 , " IES Castillo de Luna" , " pública" } ,
254- new Object [] { 11007533 , " IES Arroyo Hondo" , " pública" } ,
255- new Object [] { 11701164 , " IES Astaroth" , " pública" }
256- };
253+ Centro [] centros = new Centro [] {
254+ new Centro ( 11004866 , " IES Castillo de Luna" , " pública" ) ,
255+ new Centro ( 11007533 , " IES Arroyo Hondo" , " pública" ) ,
256+ new Centro ( 11701164 , " IES Astaroth" , " pública" )
257+ }
257258
258259 try (
259260 PreparedStatement pstmt = conn. prepareStatement(" INSERT INTO Centro (id, nombre, titulacion) VALUES (?, ?, ?)" )
260261 ) {
261- for (Object [] registro : registros ) {
262- pstmt. setInt(1 , ( int ) registro[ 0 ]); // id
263- pstmt. setString(2 , ( String ) registro[ 1 ]); // nombre
264- pstmt. setString(3 , ( String ) registro[ 2 ]); // titulación
262+ for (Centro centro : centros ) {
263+ pstmt. setInt(1 , centro . getId());
264+ pstmt. setString(2 , centro . getNombre());
265+ pstmt. setString(3 , centro . getTitularidad());
265266 pstmt. executeUpdate();
266267 }
267268 }
@@ -281,9 +282,9 @@ identificador se definió. Para ello podemos hacer lo siguiente:
281282
282283 TimeDateFormatter df = TimeDateFormatter . ofPattern(" dd/MM/yyyy" );
283284 // centro es un centro que ya tenemos definido.
284- Object [][] registros = new Object [] [] {
285- new Object [] { " Perico de los Palotes" , LocalDate . parse(" 12/06/1995" , df), centro} ,
286- new Object [] { " Mariquilla de la O" , LocalDate . parse(" 07/09/1999" , df), centro}
285+ Profesor [] profesores = new Profesor [] {
286+ new Profesor ( " Perico de los Palotes" , LocalDate . parse(" 12/06/1995" , df), centro) ,
287+ new Profesor ( " Mariquilla de la O" , LocalDate . parse(" 07/09/1999" , df), centro)
287288 };
288289
289290 try (
@@ -292,11 +293,11 @@ identificador se definió. Para ello podemos hacer lo siguiente:
292293 Statement . RETURN_GENERATED_KEYS
293294 )
294295 ) {
295- for (Object [] registro : registros ) {
296- pstmt. setString(1 , registro[ 0 ] );
297- pstmt. setDate(2 , registro[ 1 ] == null ? null : Date . valueOf(registro[ 1 ] ));
296+ for (Profesor profesor : profesores ) {
297+ pstmt. setString(1 , profesor . getNombre() );
298+ pstmt. setDate(2 , profesor . getNacimiento() == null ? null : Date . valueOf(profesor . getNacimiento() ));
298299 pstmt. setObject(3 , centro == null ? null : centro. getId(), Types . INTEGER );
299- pstmt. setNull(4 , Types . INTEGER );
300+ pstmt. setNull(4 , Types . INTEGER ); // Lo debe generar automáticamente el SGBD
300301 pstmt. executeUpdate();
301302 try (ResultSet rs = pstmt. getGeneratedKeys()) {
302303 if (rs. next()) System . out. printf(" '%s' se registró con ID=%d\n " , registro[0 ], rs. getInt(1 ));
@@ -309,7 +310,7 @@ identificador se definió. Para ello podemos hacer lo siguiente:
309310 Necesitaremos :ref: `más adelante <conn-batch >` darle al menos una vuelta más.
310311
311312Obsérvese que al definir los valores de los parámetros de una consulta,
312- necesitamos cambiar de método según sea el tipo del campos . Sin embargo,
313+ necesitamos cambiar de método según sea el tipo del campo . Sin embargo,
313314|JDBC | permite usar un método genérico (``setObject ``) que se encargará de
314315inferir el tipo |SQL | correcto a partir del tipo de *Java *. La razón por la que
315316en el ejemplo se añade un tercer parámetro se debe a que el valor puede ser nulo
0 commit comments