• Android режется Base64 строка?

    TheRonCronix
    @TheRonCronix
    Если код на стороне приемника может быть изменен, то разбейте данные на куски не превышающие 64КБ и в таком виде можете отсылать в json, или не используйте json.
    Ответ написан
    1 комментарий
  • Android режется Base64 строка?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Есть ограничение на длину константной строки - 64кб, если мне не изменяет память.
    Постом нужно отправлять multipart entity, а не json.

    А так конвертация должна работать правильно.
    Ответ написан
    1 комментарий
  • Java доступ к основному потоку?

    поищите про

    asyncExec()
    (типа
    .getDisplay().asyncExec(new Runnable() {
    @Override
    public void run() {
    - это для SWT
    для Swing смотрите
    invokeLater()

    для JavaFx не помню но найдя первые два разберетесь с ним надеюсь сами
    Ответ написан
    Комментировать
  • OneToMany в Hibernate?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Я и сам только изучаю разработку на Java (hibernate, spring etc.)
    Очень хотелось бы дочерние записи (DictionaryContent ) связать с Dictionary по средствам его UUID идентификатора.

    Вам нужно использовать OneToMany & ManyToOne. Со стороны Dictionary получаете список записей DictionaryContent (List или Set), а со стороны DictionaryContent получаете объект Dictionary.

    @Entity
    public class Dictionary {
    
       @OneToMany(mappedBy = "dictionary")
        private List<DictionaryContent> contentList;
    }
    
    @Entity 
    public class DictionaryContent {
    
        @ManyToOne
        @JoinColumn(name = "id")
        private Dictionary dictionary;
    
    }


    однако в таблице DictionaryContent, не появляется никакого идентификатора-указателя на родительский Dictionary.

    это потому, что со стороны DictionaryContent скорее всего вы не связали, как в примере выше.

    Хороший пример - https://devcolibri.com/%D0%BA%D0%B0%D0%BA-%D1%81%D...
    Ответ написан
    1 комментарий
  • Java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Когда IDEA запускает вашу программу, она обеспечивает присутствие необходимых ей зависимостей в CLASSPATH. Когда её запускает сервер приложений, он этого не делает и программа падает, так как не может найти jar-файл jdbc-драйвера. Почитайте инструкцию к вашему серверу, выясните куда класть jar-файлы зависимостей.
    Ответ написан
    Комментировать
  • SQL запрос (UPDATE)?

    Синтаксис команды T-SQL UPDATE позволяет обновлять одну таблицу, но для фильтрации по аналогии с командой SELECT можно использовать множество таблиц.
    Т.е. В общем виде это выглядит так
    UPDATE
      ОбновляемаяТаблица
    SET
      ПолеОбновляемойТаблицы1 = Значение1
      , ПолеОбновляемойТаблицы2 = Значение2
    FROM
      ОбновляемаяТаблица
    LEFT OUTER JOIN
      ДополнительнаяТаблица
    ON
      ДополнительнаяТаблица.Ключ = ОбновляемаяТаблица.Ключ
    WHERE
      Условия фильтрации

    Для условий вашей задачи можно по этому шаблону преобразовать условия из вашего SELECT запроса в условия для UPDATE:
    UPDATE
      Account
    SET
      UsrLastActivityDate = GETDATE()
      , UsrProsrochen = 1
    FROM
      Account account -- Основная обновляемая таблица
    LEFT OUTER JOIN
     Activity activity -- дополнительная таблица с информацией о задачах
    ON
     activity.AccountId = account.Id
    WHERE 
     TypeId = '03a75490-53e6-df11-971b-001d60e938c6'
      AND DATEDIFF(dd, ModifiedOn ,GETDATE()) > 60
      AND activity.Id IS NULL -- аналогичный SELECT фильтр на отсутствие задач
    Ответ написан
    Комментировать
  • Алгоритм равномерного распределения заявок?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    foreach (var newOrder in newOrders)
    {
        // ищем минимальное количество заявок среди всех менеджеров
        var minOrdersCount = managers.Min(m => m.Orders.Count);
        // ищем менеджера с найденным количеством (если несколько - берём первого)
        var manager = managers.First(m => m.Orders.Count == minOrdersCount);
        // даём заявку менее занятому менеджеру
        manager.Orders.Add(newOrder);
    }

    Этот алгоритм не самый быстрый - постоянно ищется сначала количество заявок у всех менеджеров, потом поиск менеджера с минимальным количеством заявок.

    Вот алгоритм посложнее, в нём поисков по всем менеджерам происходит меньше (особенно, когда большое количество новых заявок):
    class Manager
    {
        public string Name { get; private set; }
        public List<int> Orders { get; private set; }
    
        public Manager(string name, int ordersCount = 0)
        {
            Name = name;
            Orders = ordersCount > 0
                ? Enumerable.Range(1, ordersCount).ToList()
                : new List<int>();
        }
    }
    
    static void Main(string[] args)
    {
        var managers = new Manager[]
        {
            new Manager("Лена", 1), 
            new Manager("Оля", 10), 
            new Manager("Иван", 35), 
            new Manager("Сергей", 75), 
        };
        var newOrders = Enumerable.Range(1, 35).ToList();
        var newOrdersCount = newOrders.Count;
        var ordersAssigned = 0;
    
        while (ordersAssigned < newOrdersCount)
        {
            var ordersCounts = managers.Select(m => m.Orders.Count).OrderBy(count => count).Distinct().ToArray();
            var addingOrdersCount = ordersCounts.Length > 1 ? ordersCounts[1] - ordersCounts[0] : ordersCounts.First();
            var managersWithMinOrders = managers.Where(m => m.Orders.Count == ordersCounts[0]).ToArray();
            // нашли менеджеров с минимальным количеством заявок
            if (managersWithMinOrders.Length * addingOrdersCount < newOrdersCount)
            { // заполняем самых незанятых менеджеров до того же уровня занятости
              // т.е. добавляем Лене (10 - 1) = 9 заявок
                foreach (var manager in managersWithMinOrders)
                {
                    for (int i = 0; i < addingOrdersCount; i++)
                    {
                        manager.Orders.Add(newOrders[ordersAssigned]);
                        ordersAssigned++;
                    }
                }
            }
            else
            {
                // незанятых менеджеров нет, заполняем оставшиеся заявки по менеджерам по очереди
                while (ordersAssigned < newOrdersCount)
                {
                    var managerIndex = ordersAssigned % managersWithMinOrders.Length;
                    managersWithMinOrders[managerIndex].Orders.Add(newOrders[ordersAssigned]);
                    ordersAssigned++;
                }
            }
        }
    
        foreach (var manager in managers)
        {
            Console.WriteLine("{0}: {1} заявок", manager.Name, manager.Orders.Count);
        }
        Console.ReadKey();
    }
    Ответ написан
    1 комментарий
  • MSSQL запрос (поиск среднего значения за день за период)?

    @res2001
    Developer, ex-admin
    Группируйте не по UsrCDistributionDate, а по MANAGER или лучше по MANAGER_ID, count(*) делите на количество дней в периоде.
    Ответ написан
    Комментировать
  • MSSQL запрос (поиск среднего значения за день за период)?

    @nozzy
    Symfony, Laravel, SQL
    как то так:
    select
    t2.`name` as manager,
    AVG(t1.OwnerId) as average_value
    from orders t1
    inner join contact t2 on t2.id = t1.OwnerId
    where t1.OwnerId='CB3548C1-0339-4386-BE7D-FD08FF7F6DB7'
    and (UsrCDistributionDate BETWEEN GETDATE()-90 AND GETDATE())
    group by t2.`name`
    Ответ написан
    Комментировать
  • JAVA JDBC не удается получить одну запись из таблицы?

    @Neonoviiwolf
    Flutter developer
    Я в таких случаях пишу примерно так
    if (rs.next()) 
    {
          do{
    ................................
          } while (rs.next());
    }

    так и цикл есть и не надо лепить отдельно для выдачи одной строки
    Ответ написан
    1 комментарий
  • JAVA JDBC не удается получить одну запись из таблицы?

    netrox
    @netrox
    Попробуй:
    if (rs.next()) 
    {
               String name = rs.getString("NAME");
               String uid = rs.getString("UID");
               System.out.println(uid+":"+name);
    }
    Ответ написан
    Комментировать
  • Java проблемы с сортировкой(групировкой)?

    iLLuzor
    @iLLuzor
    Java, Kotlin, Android Developer
    Вы каждый раз создаёте новый Set, потому там и один элемент.
    Нужно проверять, если такой ключ уже существует, нужно добавить в существующий Set юзера, если нет - создавать новый Set.
    Ответ написан
    Комментировать
  • Java проблемы с сортировкой(групировкой)?

    Nirail
    @Nirail
    Дайте мне повод и я во все решу
    Проблема в этом куске:
    while(iterator.hasNext()){
                 User item = (User) iterator.next();
    
         //корзина для пользователей с одинаковым кол-вом очков
                 HashSet<User> bucket = new HashSet<>();
                  for(int i=0;i<list.size();i++){
                      User subItem = list.get(i);
                      if(item.getLeadQualificated() == subItem.getLeadQualificated()){
                          if(bucket.add(item)){
                             System.out.println("Добавил в корзину : "+item.getLeadQualificated()+"-> "+item.getManager());
                         }
    
                      }
                 }
               
                resultMap.put(item.getLeadQualificated(),bucket);//(key-очки, value - список пользователей с таким кол-вом очков)
             }

    Так как ты проходишь по все коллекции и каждый раз создаешь новый сет, и в него добавляешь только один элемент (возможно, опечатка item -> subItem?).
    В любом случае алгоритм лучше преосмыслить и сделать оптимальней.
    Ответ написан
    Комментировать
  • Java проблемы с сортировкой(групировкой)?

    EreminD
    @EreminD
    Кое-что умею
    Не страдайте, используйте стримАПИ
    ArrayList<User> list = new ArrayList<>();
            list.add(new User("Иванов",2));
            list.add(new User("Петров",2));
            list.add(new User("Сидоров",5));
            list.add(new User("Павлов",5));
            list.add(new User("Ромашкин",1));
    
            //Конечный результат
            Map<Integer, List<User>> result = list.stream().collect(Collectors.groupingBy(o -> o.scores));
    
            //выводим результат
            result.forEach((k,v) -> {
                System.out.println("Scores: " + k);
                v.forEach(u -> System.out.println(u.name));
            });
    
    ////
    Scores 1
    Ромашкин
    Scores 2
    Иванов
    Петров
    Scores 5
    Сидоров
    Павлов
    Ответ написан
    Комментировать
  • Как получить дату начала и конца предыдущей недели?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    import java.util.Locale;
    import java.time.LocalDate;
    import java.time.temporal.WeekFields;
    import java.time.DayOfWeek;
    import static java.time.temporal.TemporalAdjusters.previousOrSame;
    import static java.time.temporal.TemporalAdjusters.nextOrSame;
    
    public class Main {
        
        /**
         * Determines first and last day of previous, current or following week from
         * provided date according to the provided locale.<br/>
         * <br/>
         * <strong>NOTE</strong>: Although international standard ISO 8601 defines Monday as a first
         * day of the week, several countries, including the United States, Canada,
         * and Australia consider Sunday as the start of the week, and several other
         * countries starts the week from Saturday.
         * 
         * @param fromDate from which date the week offset should be calculated
         * @param weekOffset offset in whole weeks, negative - previous, 0 - current, positive - following weeks 
         * @param locale locale defining which day should be considered a first day of week 
         * @return array of length 2, containing the dates of the first and last day of the week
         */
        private static LocalDate[] getLocalizedWeekBoundary(LocalDate fromDate, long weekOffset, Locale locale) {
    
            LocalDate[] result = new LocalDate[]{null,null};
            
            DayOfWeek localizedFirstDayOfWeek = WeekFields.of(locale).getFirstDayOfWeek();
            DayOfWeek localizedLastDayOfWeek = localizedFirstDayOfWeek.plus(6L);
            
            try{
                LocalDate shiftedWeekDate = fromDate.plusWeeks(weekOffset);
                result[0] = shiftedWeekDate.with(previousOrSame(localizedFirstDayOfWeek));
                result[1] = shiftedWeekDate.with(nextOrSame(localizedLastDayOfWeek));
            } catch (Exception ex){
                // Just add a bit more explanation for the possible RuntimeException, 
                // which may be thrown if the provided fromDate/weekOffset combination 
                // cannot be calculated. 
                throw new IllegalArgumentException(String.format("Shift of provided date by %d week(s) not supported!", weekOffset), ex);
            }
            
            return result;
        }
    
        public static void main(String[] args) {
    
            for(Locale locale : Locale.getAvailableLocales()){
                if(! locale.getDisplayCountry().isEmpty()){
                    doTest(locale);
                }
            }
        }
        
        private static void doTest(Locale locale){
            
            LocalDate[] boundary;
            
            String separator = Locale.getDefault().equals(locale) ? 
                    "= = = = = = = = = D E F A U L T = = = = = = = ="
                  : "- - - - - - - - - - - - - - - - - - - - - - - -";
    
            System.out.printf("%n%s%nIn: %s (%s)%nfirst day of week is: %s%n", separator,
                    locale.getDisplayCountry(), locale, WeekFields.of(locale).getFirstDayOfWeek());
            
            LocalDate fromDate = LocalDate.now();
            for (int shift = -1; shift < 2; shift++) {
                boundary = getLocalizedWeekBoundary(fromDate, shift, locale);
                System.out.printf("Shift %+2d => first: %s - last: %s%n", shift, boundary[0], boundary[1]);
            }
        }
        
    }


    Чтоб предупредить вопрос, зачем нужны такие подскоки: Веселые картинки
    Ответ написан
    Комментировать
  • Как получить дату начала и конца предыдущей недели?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вроде бы jodatime уже давно в яве сидит (!) - joda-time.sourceforge.net/userguide.html#Manipulat...
    DateTime dt = new DateTime(); // current
    DateTime odt = dt.minusDays(7); // past week
    		
    DateTime mon = odt.dayOfWeek().setCopy(DateTimeConstants.MONDAY); // get monday of week
    DateTime fri = odt.dayOfWeek().setCopy(DateTimeConstants.FRIDAY); // get friday of week
    		
    System.out.println(mon);
    System.out.println(fri);
    
    System.out.println(mon.getDayOfMonth());
    System.out.println(fri.getDayOfMonth());


    2018-05-14T14:41:06.072+03:00
    2018-05-18T14:41:06.072+03:00
    14
    18
    Ответ написан
    Комментировать
  • MSSQL ошибка в запросе?

    tsklab
    @tsklab Куратор тега SQL Server
    Здесь отвечаю на вопросы.
    Получаю ошибку Column 'SysAdminUnit.Name'

    Так исправьте:
    GROUP BY l.OwnerId, u.Name

    Не надо экономить на символах. Не нужно использовать псевдонимы, если это затрудняет понимание.
    Ответ написан
    1 комментарий
  • Динамическое добавление ссылок на js скрипты в заголовок?

    pavelkarinin
    @pavelkarinin
    Full Stack Web Developer
    Вы используете suggestions до того как его загрузили, поэтому получаете "suggestions is not a function"
    Ответ написан
    1 комментарий
  • Динамическое добавление ссылок на js скрипты в заголовок?

    @alexalexes
    Хватит и нативной составляющей, чтобы в документ добавить любой head.
    А вообще, смотрите скрипты счетчиков Яндекс или Гугл -метрики, там есть более компактные трюки с модификацией head.
    (function()
    {
      var src = 'https://cdn.jsdelivr.net/npm/suggestions-jquery@17.12.0/dist/css/suggestions.min.css';
      var link = document.createElement('link');
      link.setAttribute('src', src);
      link.setAttribute('type', 'text/css');
      link.setAttribute('rel', 'stylesheet');
     document.head.appendChild(link);
    
      src = 'https://cdn.jsdelivr.net/npm/suggestions-jquery@17.12.0/dist/js/jquery.suggestions.min.js';
      var scrt = document.createElement('script');
       scrt.setAttribute('src', src);
      document.head.appendChild(scrt);
    }
    )();
    Ответ написан
    Комментировать
  • Правильно ли я подхожу к решению задачи(Java организация класса)?

    EreminD
    @EreminD
    Кое-что умею
    В целом, выглядит осмысленно
    1. Классы Logo и Menu можно вынести в отдельные файлы - это, в будущем, поможет вам не теряться в коде (когда классов становится много и выясняется, что в одном файле больше одного класса, начинаешь теряться)
    2. Не очень ясно по коду
      {
             context = this;
             setWidth(200px)
            
             logo = new Logo(); //Блок логотипа
             menu = new Menu(); //Само меню
             addComponent(logo,menu)
           }

      Что такое context и где объявлен метод addComponent, setWidth. Если вы ничего не вырезали из кода, когда сюда выкладывали, то не понятно, как он у вас выполняется
    Ответ написан
    5 комментариев