2013-07-10 1 views
0

В MySQL строки клиента команды после входа в систему с правами администратора, я напечатал:создания пользователя в MySQL с помощью Java

connect mydb; 
grant all privileges on mydb.* to 'admin'@'localhost' identified by 'pass'; 

В настоящее время в Java, Я успешно подключиться к БД с помощью администратора идентификатор пользователя, используя водители.

Statement put=connect.createStatement(); 

//**WORKS succesfully** 
put.execute("insert into mydb.emp values(100,joe)"); 

//**does NOT work** 
put.execute("grant all privileges on mydb.* to 'john'@'localhost' identified by 'pass'"); 

Почему команда вставки работает, но команда grant никогда не работает через Java?

Пожалуйста, помогите.

+0

Одна вещь, которую я вижу сразу, что ваш INSERT запрос является строкой, в то время как йо ur Запрос GRANT - нет. – BLaZuRE

+0

@ Xperiaz X как root вы имеете в виду, например, от linux-терминала? –

+0

Не все базы данных поддерживают DDL-команды через JDBC, поэтому вы не сможете вообще изменять структуру базы данных через JDBC. – beny23

ответ

1
put.execute(MySQL query) 

здесь можно выполнить только запрос MySQL, но

grant all privileges on mydb.* to 'admin'@'localhost' identified by 'pass'; 

Не MySQL запросов это просто команда для MySQL.

+0

О, я вижу. Так можно ли отправлять команды в MySQL через java? –

+0

Вы должны установить пользовательские привилегии через терминал администратора MySQL (командной строки) –

+0

Невозможно использовать java? Мое приложение добавляет сотрудника (таким образом, добавляет пользователя БД). Затем сотрудник имеет доступ к другим таблицам в базе данных –

0

Вы только что забыли кавычки.

+0

. Мой плохой. В коде я поставил цитату, но здесь я забыл набрать ее –

+0

@XperiazX, в этом случае вы должны посмотреть мой ответ. Проверьте флаг ExtendedAnsiSQL –

0

Попробуйте следующие

put.execute("grant all privileges on mydb.* to 'john'@'localhost' identified by 'pass'"); 

А также убедитесь, что у вас есть ExtendedAnsiSQL флаг в 1.

+0

Извините, в коде я поставил цитату, но здесь я забыл набрать ее здесь. Флаг ExtendedAnsiSQL? скажите, что это такое? –

0

Я попытался работать с параметрами запроса - то, что я нашел несколько сбивает с толку в том, что вы должны поставить пробел между параметр и @localhost, например, - это здесь работало для меня: (jpaEm является JpaEntityManager здесь)

// Create user 
String sql = "CREATE USER ? @localhost"; 
Query query = jpaEm.createNativeQuery(sql); 
query.setParameter(1, user.getUserName()); 
jpaEm.getTransaction().begin(); 
query.executeUpdate(); 
jpaEm.getTransaction().commit(); 

// Set password 
sql = "SET PASSWORD FOR ? @localhost = PASSWORD(?)"; 
query = jpaEm.createNativeQuery(sql); 
query.setParameter(1, user.getUserName()); 
query.setParameter(2, user.getPassword()); 
jpaEm.getTransaction().begin(); 
query.executeUpdate(); 
jpaEm.getTransaction().commit(); 
Смежные вопросы