2013-07-10 39 views
0

MySQL的命令行客户端以root身份登录后,创建用户在MySQL中,我输入:用java

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工作?

请帮忙。

+0

一两件事,我立刻看到的是,你的INSERT查询是一个字符串,而哟我们的GRANT查询不是。 – BLaZuRE

+0

@Xperiaz X作为根你的意思是从Linux终端为例? –

+0

并非所有数据库都通过JDBC支持DDL命令,所以您可能根本无法通过JDBC修改数据库结构。 – beny23

回答

1
put.execute(MySQL query) 

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

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

不是一个MySQL查询,这只是一个对MySQL命令。

+0

哦,我明白了。 那么有可能通过java发送命令给MySQL? –

+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();