Как подключить локальную БД XAMPP MySQL с помощью JDBC?
У меня есть эта игра Tetris, написанная на Java, которая использует DB для записи высоких результатов. Он работал нормально, пока я использовал удаленный MySQL DB, но теперь я пытаюсь настроить localhost DB с помощью XAMPP MySQL, и он продолжает работать как "sqlexception: сбой канала связи" по команде:
con = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/score", user, psw);
Я думаю, что это неправильный URL или конфигурация БД, но я действительно не знаю, что проверить. Есть идеи?
EDIT: мой друг исправил мою проблему, заменив "localhost" в URL-адресе по "127.0.0.1" (что было довольно неловко, как вы можете себе представить :P ).
такой вопрос: почему XAMPP не может перевести "localhost" в IP-адрес и как его исправить?
3 ответов
почему XAMPP не может перевести "localhost" в IP-адрес и как его исправить?
это не проблема XAMPP или проблема программирования. Это больше проблема DNS.
Для начала, у вас есть %SystemRoot%/system32/drivers/etc/hosts
файл со следующей строкой как первый линии? (таким образом, после всех комментариев, но перед любыми другими объявлениями хоста)
127.0.0.1 localhost
обновление: согласно комментариям, которые я погуглил немного, и похоже, что драйвер JDBC MySQL не ест протокол IPv6 адреса вообще. Другими словами, вам нужно изменить ::1
to 127.0.0.1
. Но я также нашел этой теме который упоминает, что вы можете использовать следующий аргумент JVM для устранения этой проблемы:
java -Djava.net.preferIPv4Stack=true
Я попытался и получил успешное соединение. Сначала создайте базу данных в phpMyAdmin и - ЭГ. 'базы данных mydb' а потом в коде поставили соединение.url с этим значением
'jdbc:mysql://localhost:3306/mydb'
Если вы сначала не создадите базу данных, она не будет подключаться
в MySql вы должны явно разрешить доступ для вашего пользователя из localhost. Вот пример (взято из здесь):
mysql> grant usage on *.* to amarokuser@localhost identified by 'amarokpasswd';
mysql> grant all privileges on amarokdb.* to amarokuser@localhost ;