• Можно ли получать данные из ResultSet не удаляя их из ResultSet?

    Vamp
    @Vamp
    Можно "перемотать" ResultSet и повторно прочитать из него данные:
    try (ResultSet rs = statement.executeQuery(query)) {
        while (rs.next()) {
            System.out.println("User: " + rs.getString("login"));
        }
        rs.beforeFirst(); // <-- перематываем
        while (rs.next()) {
            System.out.println("Hello, " + rs.getString("login"));
        }
    }


    Но это не сработает, если драйвер создал ResultSet типа TYPE_FORWARD_ONLY или реализация ResultSet не поддерживает перемотку в принципе. В этом случае придётся прочитать весь результат полностью в промежуточное хранилище и дальше работать уже с ним:
    class User {
        private final String login;
        private final String name;
        private final String email;
    
        public User(ResultSet rs) throws SQLException {
            login = rs.getString("login");
            name = rs.getString("name");
            email = rs.getString("email");
        }
    
        public String getLogin() {
            return login;
        }
        public String getName() {
            return name;
        }
        public String getEmail() {
            return email;
        }
    }

    List<User> users = new ArrayList<>();
    try (ResultSet rs = statement.executeQuery(query)) {
        while (rs.next()) {
            users.add(new User(rs));
        }
    }
    for (User u : users) {
        System.out.println("Hello, " + u.getLogin());
    }

    Вариант с использованием отдельного класса для хранения результатов используется повсеместно и имеет своё собственное название - DTO (Data Transfer Object).
    Ответ написан
    Комментировать
  • Как прибавить +1 к значению в sqlite?

    Vindicar
    @Vindicar
    RTFM!
    > Сама ошибка - star = cursor.fetchone()[0]
    > TypeError: 'NoneType' object is not subscriptable

    not subscriptable означает что ты пытаешься взять индекс у объекта, который это не поддерживает. В твоем случае объект типа NoneType - т.е. None.
    Иными словами, cursor.fetchone() вернул None, и конечно у None нельзя взять индекс.
    Почему fetchone() вернул None? Потому что запрос SELECT не нашёл ни одной строки с подходящим значением photo!

    Как это решить?
    Вставить в таблицу строку с photo, а если не получится (так как такое photo уже есть), то обновить. Есть два способа.
    1. Кодом. Проверить, что вернул fetchone(). Если None, то делаем INSERT. Если не None, то UPDATE.
    2. Средствами БД, что обычно называется UPDATE/INSERT, или коротко UPSERT. Для sqlite это потребует примерно такого запроса:
    INSERT INTO stars (photo, star) VALUES (ид фото, 1) ON CONFLICT (photo) DO UPDATE SET star = star + 1

    Требование: столбец photo должен быть первичным ключом или хотя бы иметь уникальный индекс, иначе запрос просто будет добавлять дубликат строки.

    ВАЖНО
    f'SELECT star FROM stars WHERE photo = "{photo}"' - никогда так не делайте! Особенно если входные данные получены от пользователя. Это хороший способ заполучить SQL-инъекцию.
    Используйте placeholders, по порядку:
    cursor.execute('SELECT star FROM stars WHERE photo = ?', (photo, ) )
    или по именам
    cursor.execute('SELECT star FROM stars WHERE photo = :photo', {'photo' : photo} )
    И удобнее и безопаснее.
    Ответ написан
    7 комментариев
  • Куда делся миллионный вопрос Хабра?

    DevMan
    @DevMan
    в силу определенных причин чётных номеров тут вообще нет.
    поэтому или 999999 или 1000001.
    Ответ написан
    3 комментария
  • Как сделать персональное голосовое приветствие на Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Примерно так:
    var userPrompts = Map.of("SERGEY", new SimplePrompt("SERGEY.wav"),
                             "ANDREW", new SimplePrompt("ANDREW.wav"));
    
    var block = userPrompts.get("SERGEY");


    Сюда бы еще наполнение мапы из бд прикрутить...
    Ответ написан
    Комментировать
  • Прыгаю с языка на язык, с одной сферы в другую, как сфокусироваться на одном языке?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Чтобы бросить курить надо просто перестать засовывать сигареты в рот и поджигать их. Тут тот же принцип
    Ответ написан
    Комментировать
  • Что нужно и на каком уровне знать в математике чтобы читать Дональда Кнута?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Хотелось бы овладеть той математической базой чтобы +- свободно ориентироваться в книге и понимать ее, чтобы знания откладывались а не просто страницы переворачивались.

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

    @cicatrix
    было бы большой ошибкой думать
    Если честно, думаю, что искусство программирования читают только, чтобы выпендриться. Практически же, никаких особых навыков книга не даёт. Да, как академический труд можно почитать, иногда даже интересно, горизонты расширяет, в целом. Но вот как программисту лично мне эта книга абсолютно ничего не дала.
    Ответ написан
    9 комментариев
  • Как прервать порочный круг опыта?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Крупные конторы в которых практикуется миграция. Найм сотрудника стоит конторе 3-6 месячных зарплат. Обучение обычно 20% в неделю если конечно нет горящего проекта. То есть через пол года вы дорастёте до нового скила просто читая курсы по пятницам. Это выгодней конторе чем привлекать готового специалиста.
    Ответ написан
    Комментировать
  • Как прервать порочный круг опыта?

    @nApoBo3
    Опыт стоит денег.
    Для получения опыта вам необходимо согласиться на вакансию с понижением в сферу где этот опыт есть.
    Ответ написан
    Комментировать
  • Почему нужно гуглить на английском?

    profesor08
    @profesor08
    1. Просто на английском инфы больше, несоизмеримо больше.
    2. Шанс того, что кто-то в мире столкнулся с искомой проблемой гораздо выше, чем кто-то из русского сегмента.
    3. Искать то-же проще, вбил ключевые слова и связи между ними и все, не надо перебирать несколько вариаций вопроса разными словами.
    4. Документация практически всегда есть на английском, изредка есть недоделанный и кривой перевод на другие языки.
    5. Да и функции, в основном на английском.

    русский то знаешь лучше, а значит на русском ты больше поймешь, чем на английском.

    Заблуждение. Чтоб что-то найти, надо знать что ищешь. К языку это мало имеет отношения.
    Ответ написан
    2 комментария
  • С чего начять новичку в СИ?

    includedlibrary
    @includedlibrary
    Си можно начать изучать с книги "Язык программирования Си" Кернигана и Ритчи. Или с "Head First C" (я начинал с неё). Потом можно почитать про новые фичи стандарта c11.
    Если вы хотите низкоуровневым программированием заниматься, то для начала нужно прочитать "Архитектура Компьютера" Таненбаума. Ещё есть очень хорошая книга "Цифровая схемотехника и архитектура компьютера" от Сары и Дэвида Харрис.
    Потом читать спецификации на железки, под которые вы хотите писать код.
    Ответ написан
    1 комментарий
  • Зачем нужна функция?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Ничто не мешает использовать и то и другое.
    А вопрос раскрывается прочтением хотя бы первых глав практической любой обучающей книги по основам программирования.
    Ответ написан
    Комментировать
  • Как лучше реализовать архитектуру счётчика заказов на BackEnd?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Зачем это делать по расписанию если можно сделать событийную систему с помощью брокера сообщений. Можно взять для старта RabbitMQ. А если есть уверенность в себе то лучше Kafka чтобы можно было возвращаться во времени
    Ответ написан
  • Django в веб разработке, зачем он нужен?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Я не могу понять какое место он имеет в веб разработке

    Django - это один из многих инструментов для создания веб-сайтов.
    Впрочем как и любые другие инструменты - он занимает свою нишу.

    зачем он нужен?

    Нужен, как ни странно, - для разработки веб-сайтов.

    Что именно непонятно-то?
    Ответ написан
    4 комментария
  • Фреймворки в веб-разработке?

    DevMan
    @DevMan
    а зачем столько производителей авто, а не одна Тойота?
    а зачем столько производителей молока?
    а зачем столько производителей туалетной бумаги?

    да потому что одним нравится одно, другим - другое.
    а один продукт на рынке - стагнация. доказано в разных отраслях, и не однократно.

    кстати, для фронта не так уж и много фреймворков в сравнении с бэком.
    Ответ написан
    1 комментарий
  • Как вести себя в ситуации, когда клиент хочет написать заявление в полицию?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Нет договора - нет работы. Для начала ему придется доказать тот факт, что деньги были заплачены за работу, а не просто подарены тебе. Он же тебе их на карточку перевел? На личную карточку? То есть просто подарил :) (потому-то этим так активно пользуются мошенники :) )
    А ты в знак благодарности решил ему сайт сделать.
    У вас не возникло взаимных обязательств (ну, с точки зрения закона). В чем он тебя будет обвинять? Он сам их перевел тебе.
    Единственное, в чем он может обвинить - незаконная предпринимательская деятельность и уход от налогов. Я не знаю, как там с самозанятыми в этом отношении, возможно за это можно ухватиться, но ему правда от этого ничего не будет - максимум чего он добьется - с тебя налоги вычтут за "заработанную" сумму.
    Ответ написан
    3 комментария
  • Как вести себя в ситуации, когда клиент хочет написать заявление в полицию?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Кидалово чистой воды. А вот заблокировали зря. Разблокируйте и сообщите что он не доплатил вам 43000 рублей. И вы подаёте на него в суд. На основании посменной договоренности о работах. Кроме того запишите телефонный разговор на диктофон , видимо будет разговор на повышенных тонах, после этого пишите заявление в собр о вымогательстве. Они это любят.
    Ответ написан
    8 комментариев
  • Как парсить json?

    @galaxy
    Есть тип jsonb, из него извлечь можно так:
    create table t (f jsonb);
    insert into t values ('{"t_in":[0],"t_out":[1]}');
    
    # table t;
                  f
    -----------------------------
     {"t_in": [0], "t_out": [1]}
    
    # select f->'t_in' from t;
     ?column?
    ----------
     [0]
    (1 row)


    Если поле имеет строковый тип:
    select '{"t_in":[0],"t_out":[1]}'::jsonb->'t_in';
    Ответ написан
    1 комментарий
  • Стоит ли строить своё изучение/обучение именно так?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    4.Практикум программирования

    Это не отдельная тема. Это способ, которым нужно учить все остальные пункты.
    Ответ написан
    1 комментарий
  • Стоит ли строить своё изучение/обучение именно так?

    DevMan
    @DevMan
    так не стоит: у вас пункты перепутаны и совершенно нелогичны.
    надо не программы обучения строить (тем более такие), а тупо учить и практиковать.
    Ответ написан