@@ -17,6 +17,8 @@ simplificar la creación del pool y abstraernos de qué se usa para crearlo,
1717podemos envolverlo en una clase como esta:
1818
1919.. literalinclude :: files/ConnectionPool.java
20+ :class: toggle
21+ :caption: ConnectionPool.java
2022 :name: clase-connectionpool
2123 :language: java
2224 :start-at: public class
@@ -45,6 +47,11 @@ mismos parámetros, devolverá el pool ya creado y no otro distinto:
4547 pool1 == pool4; // false
4648 ConnectionPool pool5 = PoolConnection . getInstance(); // IllegalArgumentException (hay dos, ¿cuál?)
4749
50+ .. warning :: Obsérvese la |URL| que se ha utilizado en los ejemplos. En el caso
51+ particular de *SQLite *, para que las distintas conexiones del *pool * abran
52+ conexión a la misma base de datos en memoria, no basta con que la ruta sea
53+ :file: `:memory: `, sino que ha de usarse :file: `file::memory:?cache=shared `.
54+
4855.. _conn-sqlutils :
4956
5057Tratamiento funcional de las consultas
@@ -57,30 +64,43 @@ paliarlo podemos definir una clase que haga la conversión (véase el
5764
5865.. literalinclude :: files/SqlUtils.java
5966 :language: java
67+ :class: toggle
68+ :caption: ConnectionPool.java
6069 :start-at: public class
6170
62- Si incluimos este archivo en nuestro proyecto podremos hacer consultas de este
63- modo:
71+ la cual usa una excepción de usuario no protegida que debe estar también
72+ definida:
73+
74+ .. literalinclude :: files/DataAccessRuntimeException.java
75+ :language: java
76+ :class: toggle
77+ :caption: DataAccessRuntimeException.java
78+
79+ Con estas clases y definiendo un método estático para convertir un registro de
80+ la tabla *Centro * (esto es, un |ResultSet |) en un objeto ``Centro ``:
81+
82+ .. code-block :: java
83+
84+ public static Centro resultSetToCentro(ResultSet rs) throws SQLException {
85+ int id = rs. getInt(" id" );
86+ String nombre = rs. getString(" nombre" );
87+ Titularidad titularidad = Titularidad . fromString(rs. getString(" titularidad" ));
88+ return new Centro (id, nombre, titularidad);
89+ }
90+
91+ se puede obtener un objeto :java-util: `Stream <stream/Stream> ` que permita recorrer los
92+ resultados de la consulta:
6493
6594.. code-block :: java
66- : emphasize- lines: 6 - 14
95+ : emphasize- lines: 6
6796
6897 // No los cerramos, porque se encargara el cierre del flujo de hacerlo.
6998 Statement stmt = conn. createStatement();
7099 ResultSet rs = stmt. executeQuery(" SELECT * FROM Centro" );
71-
72- try ( // try-with-resources para asegurarnos de liberar los recursos (stmt y rs)
73- Stream<Centro > centros = SqlUtils . resultSetToStream(stmt, rs, fila - > {
74- // Esta función puede generar un SQLException
75- int id = fila. getInt(" id" );
76- String nombre = fila. getString(" nombre" );
77- // Suponemos que hemos definido mejor Titularidad y hemos creado
78- // un método estático que obtiene Titularidad.PUBLICA a partir de "pública", etc.
79- Titularidad titularidad = Titularidad . fromNombre(fila. getString(" titularidad" ));
80- return new Centro (id, nombre, titularidad);
81- });
82- ) {
83- // Tratamos el flujo como estimemos más oportuno.
100+
101+ // try-with-resources para asegurarnos de liberar los recursos (stmt y rs)
102+ try (Stream<Centro > centros = SqlUtils . resultSetToStream(stmt, rs, Main :: resultToCentro)) {
103+ // Tratamos el flujo como estimemos más oportuno.
84104 for (Centro c: (Iterable<Centro > ) centros:: iterator) {
85105 System . out. println(c);
86106 }
@@ -100,12 +120,7 @@ modo:
100120 Statement stmt = conn. createStatement();
101121 ResultSet rs = stmt. executeQuery(" SELECT * FROM Centro" );
102122 ) {
103- centros = SqlUtils . resultSetToStream(stmt, rs, fila - > {
104- int id = fila. getInt(" id" );
105- String nombre = fila. getString(" nombre" );
106- Titularidad titularidad = Titularidad . fromNombre(fila. getString(" titularidad" ));
107- return new Centro (id, nombre, titularidad);
108- });
123+ centros = SqlUtils . resultSetToStream(stmt, rs, Main :: resultToCentro);
109124 }
110125
111126 for (Centro c: centros) {
@@ -129,7 +144,7 @@ modo:
129144 .. code-block :: java
130145
131146 try (Stream<ResultSet > result = SqlUtils . resultSetToStream(stmt, rs)) {
132- // Tratamiento del rs (sin usar next, porque ya avanza el solo)
147+ // Tratamos el resultado como un Stream.
133148 }
134149
135150 .. _conn-transaction-manager :
0 commit comments