Я пытаюсь запустить некоторые запросы в базе данных mysql на удаленной машине. У меня нет доступа администратора на этом удаленном компьютере, поэтому мне нужно аутентифицировать мои учетные данные на этом компьютере, прежде чем я получу доступ к базе данных (которая также требует проверки имени пользователя и пароля). После прочтения этого сообщения (Read remote file in java which needs username and password) я вижу, как использовать аутентификацию для доступа к удаленному компьютеру, и я знаком с использованием DriverManager для запуска запросов в локальной базе данных; Я просто не знаю, как я могу объединить две функции. Какие-либо предложения?Запрос базы данных sql на удаленной машине с использованием кода Java
ответ
Похоже, что пользователю вы используете для подключения базы данных MySQL не имеет права удаленного доступа, так что вы должны предоставить удаленный доступ к этому пользователю.
Выполните следующие запросы на сервер MySQL как root
пользователя для создания нового пользователя и предоставления удаленного доступа к этому пользователю -
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
комментарий ниже линии в /etc/mysql/my.cnf
файле -
bind-address = 127.0.0.1
И рестарт тузд server -
sudo service mysql restart
Чтобы получить удаленный доступ, вам необходимо привязываться к внешнему IP-адресу. –
Спасибо, это оказалось проблемой! база данных не была настроена для удаленного доступа – user97468
Использование JDBC http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html. Как вы запускали запросы MySQL раньше? В JDBC вы получаете доступ к удаленным машинам, таким как локальный (EDIT: в коде).
EDIT: Учебник немного богат информацией, поэтому здесь какой-то код, чтобы вы начали:
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static Connection co;
private Statement st;
public void connectDb(){
try{
String url = "jdbc:mysql://localhost/dataset"; //url to _DATABASE_ create as mysqlroot first!
String user = "theuser";
String password = "thepassword";
Class.forName("com.mysql.jdbc.Driver");
co = DriverManager.getConnection(url, user, password);
st = co.createStatement();
co.setAutoCommit(false);
} catch(Exception e){
e.printStackTrace();
}
}
Вам нужно получить драйвер JDBC, прежде чем использовать это (см учебник)!
Это, как вы могли бы выполнить запрос:
private ResultSet executeQuery(String query){
ResultSet rs = null;
try{
rs = st.executeQuery(query);
return rs;
} catch(Exception e){
System.out.println(query);
e.printStackTrace();
}
return rs;
}
И это, как обновление может быть выполнено, обратите внимание на разницу между обновлением и запросом!
private void executeUpdate(String query){
try{
st.executeUpdate(query);//data manipulation = executeUpdate
} catch(Exception e){
System.out.println(query);
e.printStackTrace();
}
}
Надеется, что это помогает ^^ - d
Это почти код, который я использую для запросов к локальным базам данных; Однако, когда я пытаюсь выполнить запрос к удаленной базе данных (путем изменения localhost на IP-адрес удаленного сервера), я получаю сообщение об ошибке «Доступ запрещен для
Привет, вам нужно знать учетные данные, и база данных должна быть настроена так, чтобы к ней можно было получить доступ с помощью этих учетных данных и удаленным. Поэтому вам нужно связаться с администратором. Это может помочь администратору: http://stackoverflow.com/questions/6239131/how-to-grant-remote-access-permissions-to-mysql-server-for-user и http://stackoverflow.com/questions/ 16287559/mysql-add-user-for-remote-access надеюсь, что это поможет ^^ –
Как правило, база данных mysql authenticat ion на удаленной машине отличается от аутентификации на удаленной машине. Это означает, что у mysql есть собственное имя пользователя и пароль, и вы должны иметь возможность подключаться к удаленному серверу mysql, используя это имя пользователя и пароль. Аутентификация на удаленном компьютере не требуется. –
О, это хорошо знать. Так что, если я получаю ошибку «отказ в доступе» при использовании аутентификации mysql с DriverManager.getConnection (...), что может быть причиной ошибки? – user97468