code: @Override
      public SQLException attempt() {
          try {
              Connection con = this.connectionSpec.getOrCreate();
              con.setReadOnly(true);
              try {
                  Statement stmt = con.createStatement(
                          ResultSet.TYPE_FORWARD_ONLY,
                          ResultSet.CONCUR_READ_ONLY);
                  stmt.setFetchSize(AbstractSQLGenerator.FETCH_SIZE);
                  if (this.queryTimeout != null) {
                      stmt.setQueryTimeout(this.queryTimeout);
                  }
                  try {
                      SQLExecutor.executeSQL(con, stmt, this.query,
                              this.resultProcessor);
                      stmt.close();
                      stmt = null;
                  } finally {
                      if (stmt != null) {
                          try {
                              stmt.close();
                          } catch (SQLException e) {
                          }
                      }
                  }
                  con.close();
                  con = null;
              } finally {
                  if (con != null) {
                      try {
                          con.close();
                      } catch (SQLException e) {
                      }
                  }
              }
              return null;
          } catch (SQLException ex) {
              return ex;
          }
      }
docs: Attempts executing the query specified in the constructor.
  
  @return a {@link SQLException} if execution failed, or <code>null</code>
  if execution was successful.