SQL in Java 8: ResultSet Streams.
With Java 8, writing SQL will change fundamentally, no matter what API you're using.
How we write SQL in Java 7 (using JDBC)
List<Schema> result = new ArrayList<>(); try (Connection c = getConnection()) { String sql = "select schema_name, is_default " + "from information_schema.schemata " + "order by schema_name"; try (PreparedStatement stmt = c.prepareStatement(sql); ResultSet rs = stmt.executeQuery()) { while (rs.next()) { System.out.println( new Schema(rs.getString("SCHEMA_NAME"), rs.getBoolean("IS_DEFAULT")) ); } } }
try (Connection c = getConnection()) { String sql = "select schema_name, is_default " + "from information_schema.schemata " + "order by schema_name"; try (PreparedStatement stmt = c.prepareStatement(sql) { // We can wrap a Statement or a ResultSet in a // Java 8 ResultSet Stream SQL.stream(stmt, Unchecked.function(rs -> new Schema( rs.getString("SCHEMA_NAME"), rs.getBoolean("IS_DEFAULT") ) )) .forEach(System.out::println); } }
try (Connection c = getConnection()) { String sql = "select schema_name, is_default " + "from information_schema.schemata " + "order by schema_name"; DSL.using(c) .fetch(sql) // We can use lambda expressions to map jOOQ Records .map(rs -> new Schema( rs.getValue("SCHEMA_NAME", String.class), rs.getValue("IS_DEFAULT", boolean.class) )) // ... and then profit from the new Collection methods .forEach(System.out::println); }
How we write SQL in Java 8 (using Spring JDBC)
try (Connection c = getConnection()) { String sql = "select schema_name, is_default " + "from information_schema.schemata " + "order by schema_name"; new JdbcTemplate( new SingleConnectionDataSource(c, true)) // We can use lambda expressions as RowMappers .query(sql, (rs, rowNum) -> new Schema( rs.getString("SCHEMA_NAME"), rs.getBoolean("IS_DEFAULT") )) // ... and then profit from the new Collection methods .forEach(System.out::println); }
How we write SQL in Java 8 (using Apache DbUtils)
try (Connection c = getConnection()) { String sql = "select schema_name, is_default " + "from information_schema.schemata " + "order by schema_name"; new QueryRunner() .query(c, sql, new ArrayListHandler()) // We can transform any Collection into a Stream .stream() .map(array -> new Schema( (String) array[0], (Boolean) array[1] )) // ... and then profit from the new Stream methods .forEach(System.out::println); }
With Java 8, writing SQL will finally be fun again!
Visit our Java 8 Friday blog series to learn more about the great improvements that we get when using Java 8.
The sources for the above examples and for the Java 8 Friday blog series can be found on GitHub: