JDBC Query

If we need to we can get the JDBC Connection and use raw JDBC.

Note that this in practice is rare occurring less than 1% in recent applications. It is nice that we can go to raw JDBC if we need to but yes, most applications won't need to go down to raw JDBC level.

try (Transaction transaction = DB.beginTransaction()) {

  // obtain the JDBC connection from the transaction
  final Connection connection = transaction.getConnection();

  // use PreparedStatement etc
  String sql = "select id, name from customer where name like ?";
  try (PreparedStatement stmt = connection.prepareStatement(sql)) {
   stmt.setString(1, "Rob");
    try (ResultSet rset = stmt.executeQuery()) {
      while (rset.next()) {
        final long id = rset.getLong(1);
        final String name = rset.getString(2);
        ...
      }
    }
  }

  transaction.commit();
}
DB.beginTransaction().use { transaction ->

  // obtain the JDBC connection from the transaction
  val connection = transaction.connection

  // use PreparedStatement etc
  val sql = "select id, name from customer where name like ?"
  connection.prepareStatement(sql).use { stmt ->

    stmt.setString(1, "Rob")
    stmt.executeQuery().use { rset ->
      while (rset.next()) {
        val id = rset.getLong(1)
        val name = rset.getString(2)
        ...
      }
    }
  }

  transaction.commit()
}