package com.github.davidmoten.rx.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; import rx.Observable; import rx.functions.Func1; @State(Scope.Benchmark) public class Benchmarks { public Connection con = createConnection(); public final Database db = Database.from(con); @Benchmark public void selectUsingLibraryUsingExplicitMapping() { db.select("select name from person") // .get(new ResultSetMapper<String>() { @Override public String call(ResultSet rs) throws SQLException { return rs.getString(1); } }) // .toList() // go .toBlocking().single(); } @Benchmark public void selectUsingRawJdbc() { try (PreparedStatement ps = con.prepareStatement("select name from person");) { List<String> list = new ArrayList<String>(); try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { list.add(rs.getString(1)); } } } catch (SQLException e) { throw new RuntimeException(e); } } private static Connection createConnection() { Connection con = new ConnectionNonClosing(DatabaseCreator.nextConnection()); Database db = Database.from(con); // insert another 1000 people db.update("insert into person(name, score) values(?,?)").parameters( Observable.range(1, 1000).concatMap(new Func1<Integer, Observable<Object>>() { @Override public Observable<Object> call(Integer n) { return Observable.<Object> just("person" + n, n); } })); return con; } }