nikitus223, у вас есть три переменные:
int math;
int history;
int geometry;
Положите их сумму в переменную 'a' из моего примера.
Тогда в переменной 'c' будет количество часов, а в переменной 'd' количество минут.
В ответ нужно вывести не одну строку как у вас, а две.
Андрей Андреев, не совсем.
Добавление записи нужно делать отдельным вызовом.
cursor.execute("INSERT users (id, cash) VALUES (1, 0)")
И в запросе я привел пример запроса по добавлению записи в таблицу users, вам видимо нужно не только поля id и cash заполнять при добавлении нового user-а но и все остальные.
Причина в том, что вы всегда делаете
UPDATE users SET cash = cash + 40 WHERE login = ?
А он сработает, только если запись с нужным login ранее была добавлена.
Первым шагом нужно сделать:
INSERT INTO users (login, cash) VALUES ('someone', something)
Примерно похожий вариант использовали, только чтобы не шаманить с офсетами, на случай краша агрегирующего сервиса, все что прилетело в условный Map> сохранял в БД, т.е. был локальный кеш и БД, и коммитили офсет после сохранения в БД. Накладные расходы от БД у нас 20 мс на каждое сообщение, это было приемлемым временем, если это не так, то БД лучше не использовать.
Если агрегирующий сервис падал, то после подъема сервиса он начинал вычитывать кафку и смотреть локальный кеш по order_id и если там пусто, то подтягивал из БД данные по всем незавершенным задачам, если они были.
Рауф, считанную методом nextLine() строку превратить в массив методом split(), а далее проверить есть ли подстрока(слово) done в элементах этого массива и если есть, то прервать цикл ввода. А полученные элементы массив идущие до слова done добавить в ваш список.
Екатерина Шундеева, за postgres точно не скажу так глубоко не копал, но в других диалектах, таких как mssql или sybase, проверку типа нужно делать до вызова хранимки, например на форме вывода объекта, а вот допустимость значений при их правильном типе лучше в хранимке проверять. Тут скорее всего также, когда вы зовете хранимку с параметрами неправильного типа, хранимках не запускается на выполнение, ошибка возникает ещё до запуска ваших проверок, если нужно как-то это отловить нужно выполнять запуск хранимки с использованием конструкции типа try/catch, и в блоке catch отлавливать ошибки и давать им нормальное описание. Но скорее всего вам это тоже не поможет сильно, например если у вас есть хранимках и в ней 5 параметров типа int по коду ошибки вы не поймёте какой из них неверно передали.
Екатерина Шундеева, тип данных указан у каждого параметра процедуры.
Когда вы зовете процедуру, то либо в момент вызова все рухнет, из-за того что в процедуру не то подставили, либо процедура запустится.
В процедуре имеет смысл проверять допустимость переданных значений.