Для начала следующее исключение
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Communications link failure
может иметь следующие причины:
- IP-адрес или имя хоста в URL JDBC неверны.
- Имя хоста в URL JDBC не распознается локальным DNS-сервером.
- Номер порта отсутствует или неверен в URL JDBC.
- Сервер БД недоступен.
- Сервер БД не принимает соединения TCP / IP.
- На сервере БД не хватает соединений.
- Что-то среднее между Java и DB блокирует соединения, например брандмауэр или прокси.
Кроме того, понимаете ли вы , что Java-апплет физически работает на клиентской машине? То есть машина, на которой работает веб-браузер. Клиент в основном загружает апплет с веб-сервера, и он выполняется на клиентской (локальной) машине. Строка подключения JDBC jdbc:mysql://localhost:3306
будет пытаться подключиться к базе данных MySQL, работающей на той же машине, на которой работает апплет. Вы не можете разумно ожидать, что каждый клиент в мире будет использовать БД MySQL, не говоря уже о вашей базе данных / таблице.
Если все, что вам нужно, это получить доступ к серверу MySQL, расположенному на серверном компьютере (там, где работает веб-сервер), и вы хотите, чтобы апплет связался с ним, то вам действительно нужно создать и запустить веб-сервис на веб-сервере. Поскольку вы также пометили этот вопрос как [PHP]
, я полагаю, что вы используете PHP на стороне сервера, в этом случае просто создайте сценарий PHP, который выполняет действие MySQL соответственно на основе параметров запроса или pathinfo и возвращает MySQL приводит, например, как JSON или строку XML. В апплете вы можете использовать встроенный Java SE java.net.URLConnection
или более удобный клиент Apache HttpComponents для взаимодействия с веб-сервером. Э.Г.
URLconnection connection = new URL(getCodeBase(), "script.php?action=getdetails&productid=1").openConnection();
InputStream response = connection.getInputStream();
// ...
В Java вы можете обработать любой ответ JSON, используя Google Gson любой ответ XML, используя JAXP.
При этом (и не связанных с текущей проблемой) используемое вами имя драйвера JDBC является устаревшим org.gjt.mm.mysql.Driver
. Я настоятельно рекомендую использовать правильное имя драйвера, которое было введено более десяти лет назад, для замены старого имени драйвера: com.mysql.jdbc.Driver
. Кроме того, вызов Class#newInstance()
после Class#forName()
также не требуется. Это было для обхода ошибки в старом драйвере. Также см. это объяснение .