private PutResult run_put_v2(NamedBlobRecord record, NamedBlobState state, short accountId, short containerId,
      Connection connection) throws Exception {
    String query = "";
    NamedBlobRecord updatedRecord;
    try (PreparedStatement statement = connection.prepareStatement(INSERT_QUERY)) {
      statement.setInt(1, accountId);
      statement.setInt(2, containerId);
      statement.setString(3, record.getBlobName());
      statement.setBytes(4, Base64.decodeBase64(record.getBlobId()));
      if (record.getExpirationTimeMs() != Utils.Infinite_Time) {
        statement.setTimestamp(5, new Timestamp(record.getExpirationTimeMs()));
      } else {
        statement.setTimestamp(5, null);
      }
      final long newVersion = buildVersion();
      updatedRecord = new NamedBlobRecord(record.getAccountName(), record.getContainerName(), record.getBlobName(),
          record.getBlobId(), record.getExpirationTimeMs(), newVersion);
      statement.setLong(6, newVersion);
      statement.setInt(7, state.ordinal());
      statement.setLong(8, record.getBlobSize());
      query = statement.toString();
      logger.debug("Putting blob name in MySql. Query {}", query);
      metricsRecoder.namedBlobInsertRate.mark();
      statement.executeUpdate();
    } catch (SQLException e) {
      logger.error("Failed to execute query {}, {}", query, e.getMessage());
      throw e;
    }
    return new PutResult(updatedRecord);
  }
Construct a list query statement with prefix when {@link MySqlNamedBlobDbConfig#listNamedBlobsSQLOption} is 3
@param statement The {@link PreparedStatement} to set the parameters on.
@param accountId The account id
@param containerId The container id
@param blobNamePrefix The blobname prefix
@param pageToken The page token
@param maxKeysValue The max key to return
@throws SQLException
ambry-named-mysql/src/main/java/com/github/ambry/named/MySqlNamedBlobDb.java