Ваш оператор sql можно упростить до этого:
INSERT INTO acls_t(user,topic,rw) SELECT id, CONCAT(?, '/#'), 1 FROM users_t WHERE username = ?;
без использования VALUES
, для которого вы должны вложить оператор SELECT
. Поэтому измените ваш код на:
acl = conn.prepareStatement("INSERT INTO acls_t(user,topic,rw) SELECT id, CONCAT(?, '/#'), 1 FROM users_t WHERE username = ?;");
mqtt_acl.setString(1, uuid);
mqtt_acl.setString(2, name);
С этим кодом, если в таблице нет пользователя users_t
с username
, равным значению переменной name
, тогда никакая строка не будет вставлена, но ваш код попытается вставить строку в таблицу acls_t
и установить столбец user
с помощью null
.