Как вы получаете пользовательский ввод, а затем вызываете функцию с этим именем пользователя в его имени?

Итак, у вас есть

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой связи. java.net.ConnectException: соединение отклонено

blockquote>

Я цитирую из этот ответ , который также содержит пошаговое руководство по MySQL + JDBC:

Если вы получаете SQLException: Connection refused или Connection timed out или специфический для MySQL CommunicationsException: Communications link failure, то это означает, что БД недоступно. Это может иметь одну или несколько из следующих причин:

  1. IP-адрес или имя хоста в URL-адресе JDBC неверен.
  2. Имя хоста в URL-адресе JDBC не распознается локальным DNS-сервером.
  3. Номер порта отсутствует или неверен в URL-адресе JDBC.
  4. Сервер базы данных недоступен.
  5. Сервер БД не принимает соединения TCP / IP.
  6. У сервера БД закончились соединения.
  7. Что-то между Java и БД блокирует соединения, например брандмауэр или прокси.

Чтобы решить ту или иную, выполните следующие советы:

  1. Проверьте и проверьте их с помощью ping.
  2. Обновите DNS или используйте IP-адрес в URL-адрес JDBC.
  3. Проверьте его на основе my.cnf базы данных MySQL.
  4. Запустите БД.
  5. Убедитесь, что mysqld запускается без --skip-networking option.
  6. Перезапустите БД и исправьте свой код соответственно, чтобы он закрывал соединения в finally.
  7. Отключить брандмауэр и / или настроить брандмауэр / прокси, чтобы разрешить / переместите порт.
blockquote>

См. также:

0
задан Tsyvarev 13 July 2018 в 14:41
поделиться

2 ответа

Возможно, что-то вроде этого:

#!/bin/bash

echo Enter Number:
read num

function1() { echo one; }
function2() { echo two; }

case $num in
    1)
        function$num
    ;; 
    2)
        function$num
    ;;
esac
0
ответ дан Evan Jaramillo 17 August 2018 в 12:37
поделиться

Конечно, нет причин, по которым вы не можете вызвать функцию, имя которой представляет собой комбинацию строкового литерала и переменной:

#!/bin/bash

foo1() { echo 'hello from foo1!'; }
foo2() { echo 'hello from foo2!'; }
foo3() { echo 'hello from foo3!'; }

read -p "Enter a Number (1,2, or 3): " num

if [[ $num = [123] ]]; then # validate input
  foo"$num"
fi
3
ответ дан Tom Fenech 17 August 2018 в 12:37
поделиться
  • 1
    Не быть придирчивым, но это будет работать только с индексом с одной цифрой для функции. Лучше использовать: if [[$ num = ~ (1 | 2 | 3)]]; затем # подтверждение ввода .... что вы думаете? – Andre Gelinas 13 July 2018 в 14:57
  • 2
    @Andre. Это был только базовый пример проверки - если у OP действительно есть foo1 .. foo100, тогда, я думаю, было бы разумнее проверить допустимое число в этом диапазоне (или, скорее, на переосмыслить общий подход). Для основного случая в вопросе я думаю, что = [123] лучше, чем ваше регулярное выражение (а если вы были , чтобы использовать регулярное выражение, я бы предложил =~ ^[1-3]$). – Tom Fenech 13 July 2018 в 15:05