使用java在mysql中创建用户

问题描述 投票:0回答:5

以 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 中插入命令可以工作但 grant 命令却不能工作?

请帮忙。

java mysql mysql-connector sql-grant
5个回答
1
投票
put.execute(MySQL query) 

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

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

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


0
投票

你只是忘记了引号。


0
投票

尝试以下

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

还要确保您将 ExtendedAnsiSQL 标志设置为 1。


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

0
投票
  1. 也许到目前为止这可以帮助某人。我用下面的代码解决了它。

     String db = "data";
     String us = "Luis";
     String pas = "123456";
     //-----Connection to the server------------
     Class.forName("com.mysql.cj.jdbc.Driver");
     cntConnec = 
     DriverManager.getConnection("jdbc:mysql:///","admin","admin");
     Statement stmMysql = cntConnec.createStatement();
     JOptionPane.showMessageDialog(null, "Successful Connection");
     //-------Create a new DB------------
     stmMysql.execute("CREATE DATABASE "+db);
     stmMysql.execute("USE "+db);
     stmMysql.execute("CREATE TABLE bobo_table (f00 char(31))");
     //-------Create a user with all privileges--------------
     stmMysql.executeUpdate("CREATE USER "+us+"@'localhost' IDENTIFIED BY 
                    '"+pas+"'");
     stmMysql.executeUpdate("GRANT ALL PRIVILEGES ON "+db+".* TO 
                    "+us+"@'localhost' WITH GRANT OPTION");
     stmMysql.executeUpdate("FLUSH PRIVILEGES");
     stmMysql.close();
    
© www.soinside.com 2019 - 2024. All rights reserved.