0

在以 root 身份登录后,在 MySQL 命令行客户端中,我输入

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

现在在Java中,我使用驱动程序使用管理员用户 ID 成功连接到数据库。

 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'"); 

为什么插入命令有效但授权命令从不通过 Java 工作?

请帮忙。

4

4 回答 4

1
put.execute(MySQL query) 

在这里你只能执行 MySQL 查询,但是

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

不是 MySQL 查询,它只是 MySQL 的命令。

于 2013-07-10T10:24:12.357 回答
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();
于 2014-03-12T12:49:31.910 回答
0

尝试关注

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

并确保您已将 ExtendedAnsiSQL 标志设置为 1。

于 2013-07-10T10:27:55.397 回答
0

你只是忘记了引号。

于 2013-07-10T10:19:21.290 回答